文件系统缺少库:-/bin/sh: hello: not found问题及解决方法

1、问题描述:

运行一个程序,会出现-/bin/sh: xxx :not fount

打开/sbin下会发现这个xxx可执行文件是存在的,这可能是文件系统中(/lib)中缺少某些库导致的。

 

2、解决方法-以hello.c示例

以hello.c为例,编译出了hello可执行文件,放到了/sbin中,并且在/etc/init.c/rcS中添加:

/sbin/hello &

运行时出现了:

-/bin/sh: hello: notfound

 

解决方法:

一、在PC上,查看hello所依赖的库:

#arm-linux-readelf –ahello

找到:

Program Headers:

  Type           Offset   VirtAddr  PhysAddr   FileSiz MemSiz  Flg Align

  PHDR           0x000034 0x00008034 0x000080340x000c0 0x000c0 R E 0x4

  INTERP         0x0000f4 0x000080f4 0x000080f4 0x000130x00013 R   0x1

      [Requesting programinterpreter: /lib/ld-linux.so.2]

  LOAD           0x000000 0x00008000 0x000080000x005d8 0x005d8 R E 0x8000

  LOAD           0x0005d8 0x000105d8 0x000105d80x0011c 0x00120 RW  0x8000

  DYNAMIC        0x0005e8 0x000105e8 0x000105e8 0x000c80x000c8 RW  0x4

  NOTE           0x000108 0x00008108 0x000081080x00020 0x00020 R   0x4

说明hello依赖与ld-linux.so.2

 

二、拷贝库到文件系统Lib目录,创建链接文件

在编译器的lib目录中找到ld-linux.so.2:

root@xiangpingli: # pwd

/opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/arm-linux/lib

root@xiangpingli: # ls  ld-linux.so.2

ld-linux.so.2

root@xiangpingli: # ls -l  ld-linux.so.2

lrwxrwxrwx 1 500 500 11 2009-04-08 17:41ld-linux.so.2 -> ld-2.3.6.so

可以看出这是个连接文件,是指向ld-2.3.6.so的连接

 

我的做法:

将ld-linux.so.2和ld-2.3.6.so都拷贝到了我的文件系统目录的/lib下,然后再做连接:

ln-s ld-2.3.6.so ld-linux.so.2

来建立ld-linux.so.2的符号连接。

 

提示ld-linux-so.2文件已经存在

所以,应先删除ld-linux.so.2,或者说仅拷贝ld-2.3.6.so,然后建立连接:

ln-s ld-2.3.6.so ld-linux.so.2

建立ld-linux-so.2就可以了。

 

三、拷贝依赖的其他动态库

运行时还会出现如下错误:

/sbin/hello:error while loading shared libraries: libc.so.6: cannot open shared objectfile: No such file or directory

解决方法:从同一目录下拷贝过去就可以了。

 

这是再运行hello,就会成功了:

================================

hello world

================================


  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
/bin/sh: gcc: not found 是一个错误提示,表示在当前系统中找不到 gcc 编译器。gcc 是 GNU Compiler Collection 的缩写,是一种常用的编译器工具,用于编译 C、C++ 等程序语言。 如果你在使用 gcc 编译器时遇到了这个错误,可能是因为你的系统没有安装 gcc 或者没有将其路径添加到环境变量中。你可以通过以下步骤来解决这个问题: 1. 检查是否已经安装了 gcc。在终端中输入以下命令: ``` gcc --version ``` 如果显示出 gcc 的版本信息,则表示已经安装了 gcc。如果没有显示任何信息或者提示找不到命令,则需要进行下一步操作。 2. 安装 gcc。根据你所使用的操作系统不同,安装 gcc 的方法也会有所不同。例如,在 Ubuntu 系统中,可以使用以下命令安装 gcc: ``` sudo apt-get install gcc ``` 在其他操作系统中,可以通过包管理器或者从官方网站下载安装包进行安装。 3. 添加 gcc 路径到环境变量。如果已经安装了 gcc,但仍然提示找不到命令,可能是因为系统没有将 gcc 的路径添加到环境变量中。你可以编辑 ~/.bashrc 或者 ~/.bash_profile 文件,在其中添加以下行: ``` export PATH=$PATH:/path/to/gcc ``` 将 "/path/to/gcc" 替换为你的 gcc 安装路径。保存文件后,执行以下命令使修改生效: ``` source ~/.bashrc ``` 或者 ``` source ~/.bash_profile ``` 完成上述步骤后,再次尝试使用 gcc 编译器,应该就不会再出现 "/bin/sh: gcc: not found" 的错误了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值