sh: no such file or directory问题

本文介绍了解决目标板执行交叉编译出的bin文件时报“sh:nosuchfileordirectory”错误的方法,包括通过修改makefile实现静态链接及使用ldd命令查找并放置依赖的动态库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将交叉编译出的可执行程序放到目标板执行,运行时报 “sh: no such file or directory”,可是该文件明明就在当前目录啊!那为什么会报错,这是因为执行该bin程序时,找不到对应的依赖文件(一般是xxx.so)

解决办法:

1、 makefile中添加CFALGS += -static 选项将文件编译成静态链接程序,这种方式编译出来的bin文件一般会比较大,好处就是执行时没有额外的依赖文件。

2、 使用ldd(交叉编译的话需要用交叉编译工具链的ldd)命令查看,其使用方式如下:

[root@localhost bin]# ldd sh 
	linux-vdso.so.1 =>  (0x00007ffe36d4c000)
	libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003a20000000)
	libdl.so.2 => /lib64/libdl.so.2 (0x0000003a15000000)
	libc.so.6 => /lib64/libc.so.6 (0x0000003a15400000)
	/lib64/ld-linux-x86-64.so.2 (0x0000003a14c00000)

然后将依赖的动态库一起放到执行环境中,如果执行时找不到动态库的话,可以增加    

export LD_LIBRARY_PATH=XXX_PATH:${LD_LIBRARY_PATH}  

其中XXX_PATH为所依赖SO库的路径

<think>好的,用户遇到了“openrc.sh no such file or directory”的错误,需要解决这个问题。我需要根据提供的引用资料和系统级指令来生成解决方案和相关问题。 首先,用户提到openrc.sh文件不存在,可能是在尝试运行某个需要环境变量设置的命令时遇到了问题。根据引用[4],在鉴权时遇到类似问题,用户需要创建admin-openrc文件,并设置环境变量。这可能适用于openrc.sh的情况。所以解决方案的第一步应该是检查文件是否存在,如果不存在,手动创建它。 接着,引用[2]中提到SCP错误是因为路径或主机名问题,这可能提示用户检查文件路径是否正确,或者是否在正确的目录下执行命令。比如,用户可能没有进入正确的目录,或者openrc.sh的位置不在当前路径中,需要指定绝对路径或相对路径。 另外,引用[3]提到提前下载某些文件避免超时错误,可能暗示用户需要确认是否安装了必要的服务或组件,导致openrc.sh缺失。但这里可能更直接的是文件位置的问题,而不是安装缺失。 然后,引用[1]中关于执行文件找不到的问题,用户可能需要确保文件有执行权限,或者使用正确的命令来source文件,比如使用`.`或者`source`命令,而不是直接执行。 综合这些信息,解决方案应包括以下几个步骤: 1. 确认文件是否存在,若不存在则手动创建,参考引用[4]的格式。 2. 检查文件路径是否正确,可能需要使用绝对路径。 3. 确保文件权限正确,可以添加执行权限。 4. 正确加载文件的方式,使用source命令。 5. 检查主机名或路径中的特殊字符,如引用[2]提到的避免特殊符号。 6. 如果问题依旧,重新安装相关组件或检查文档。 生成相关问题的时候,需要围绕环境变量、权限问题、OpenStack配置等方向提问,帮助用户深入解决可能的相关问题。</think>### 解决`openrc.sh no such file or directory`错误的步骤 #### 1. **确认文件是否存在** - 手动创建`openrc.sh`文件(如果缺失) 根据引用[^4],可参考以下模板创建文件: ```bash # openrc.sh 示例内容(需根据实际情况修改) export OS_USERNAME=admin export OS_PASSWORD=your_password export OS_PROJECT_NAME=admin export OS_AUTH_URL=http://your_hostname:5000/v3 export OS_IDENTITY_API_VERSION=3 ``` 保存到指定路径,例如`/opt/stack/`或用户目录。 #### 2. **检查文件路径是否正确** - 使用绝对路径加载文件: ```bash source /opt/stack/openrc.sh # 根据实际路径调整 ``` - 如果文件在当前位置,检查路径是否包含特殊符号(如`.`或空格),参考引用[^2]避免主机名或路径复杂化。 #### 3. **设置文件权限** - 赋予执行权限: ```bash chmod +x /path/to/openrc.sh ``` #### 4. **验证加载方式** - 使用`source`或`.`命令加载环境变量,而非直接执行: ```bash source openrc.sh # 正确 ./openrc.sh # 错误(可能导致权限或路径问题) ``` #### 5. **检查依赖服务** - 如果文件应为自动化生成(如OpenStack组件),参考引用[^3]确认是否完成服务安装(如`devstack`或`keystone`),并重新运行安装脚本(如`./stack.sh`)。 #### 6. **主机名与网络配置** - 若涉及远程服务,检查`/etc/hosts`中的主机名映射,确保`OS_AUTH_URL`中的主机名可解析(参考引用),建议替换为IP地址测试。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值