关于./xxx 提示not found问题

meiky 2012-02-22 11:11:59
板子原来是arm-linux-gcc 3.4.5编译器,一切正常。我想换成armv4t-crosstool-linux-gnueabi-
gcc4.1.1编译器.
用armv4t-crosstool-linux-gnueabi-gcc -o test test.c 后生成的文件放到板子上
-/bin/sh: ./test: not found。
于是我就cp -frd /usr/local/arm/4.1.1/armv4t-crosstool-linux-gnueabi/lib/* /nfsroot/lib/
就出现:
#ls
ls: error while loading shared libraries: libc.so.6: cannot handle TLS data
# ./test
-/bin/sh: ./test: Permission denied

怀疑是busy box用的编译器与现在的编译器不同,所以所需要的库文件也不同。于是我就的编译器的库文件另外放在/usr/lib:
cp -frd /usr/local/arm/4.1.1/armv4t-crosstool-linux-gnueabi/lib/* /nfsroot/usr/lib/
而且增加路径LD_LIBRARY_PATH=/usr/lib/:$LD_LIBRARY_PATH
结果还是not found

再接着,我就把busy box重新用armv4t-crosstool-linux-gnueabi-gcc编译出来,把bin sbin 的usr都拷过去,指令就都不能用。

如果我编译test的时候加上-static就没问题,证明肯定还是库问题。应该放哪些库在什么地方呢?????救助???
...全文
810 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zh009zh 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 3 楼 的回复:

把busy box 重新编译成静态的,现在文件系统可以进入,但又出现:
-/bin/sh: ./test: Permission denied
权限问题???? 我早已chmod 777 test
这么好安静。。高手????

你可以在宿主机上执行file test查看该文件需要哪一个库,然后把这个库文件拷贝到开发板根文件系统的/lib目录下,一般问题就……
[/Quote]
更正一下,不是用file命令查看test文件,而是用arm-linux-readelf -a test命令,不好意思了。一般所需要的库会在Program Headers一栏出现,在自己的交叉编译器目录下找到这个库放到开发板文件系统的/lib目录下。
zh009zh 2012-06-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

把busy box 重新编译成静态的,现在文件系统可以进入,但又出现:
-/bin/sh: ./test: Permission denied
权限问题???? 我早已chmod 777 test
这么好安静。。高手????
[/Quote]
你可以在宿主机上执行file test查看该文件需要哪一个库,然后把这个库文件拷贝到开发板根文件系统的/lib目录下,一般问题就会得到解决。
lyrzhlgq 2012-02-29
  • 打赏
  • 举报
回复
1.你板子上的文件是否都是用4.1.1编译出来的,如果不是最好用同一款gcc编译。
2.你的busybox应该是静态编译的,如果不是请静态编译。
3.你的交叉编译环境是否配对了,你的交叉编译环境最好用4.1.1的gcc进行编译。
4.你用ldd或者readelf之类的工具看看你的test依赖关系,一般简单程序只是依赖libc而已,如果这样就检查一下你的libc是否是4.1.1编译出来的,板子上和你的环境中的libc是否一致。
只想到这么多了,其他的想不起来了。
meiky 2012-02-23
  • 打赏
  • 举报
回复
谢谢各位,静态编译是可以的。可是不能以后把每个程序都静态编译吧。
现在问题解决了,把lib里的库权限都改成可执行的就行了,之前改少了,出现-/bin/sh: ./test: Permission denied
这里是提示库的权限而不是test的。

有个问题:我busy box 是用3.4.5编译的, 程序是4.1.1编译的,我把 4.1.1的库放到/usr/lib里,export LD_LIBRARY_PATH=/usr/lib/:$LD_LIBRARY_PATH
这样./test 后还是提示not found是什么原因???? 将busy box的库与程序的库分开来了,各自找自己的库还不行?非得用同一个编译器?????
deep_pro 2012-02-23
  • 打赏
  • 举报
回复
我对加载机制不熟,有2个猜测
猜测1
busybox带的加载器是3.4.5,检查到你的程序要的是更高版本的库,直接返回not found,根本不去找库

猜测2
你拷贝的库不对
我的经验是 执行4.1.1工具链 ,-v 查看版本
--with-sysroot后面的目录才是正确的库
Linux-Torvalds 2012-02-22
  • 打赏
  • 举报
回复
拷贝过去,还要看看是是否load进去了。

ldconfig -p
deep_pro 2012-02-22
  • 打赏
  • 举报
回复
是把./test 静态编译
deep_pro 2012-02-22
  • 打赏
  • 举报
回复
工具链不一致的话 应该静态编译试试
deep_pro 2012-02-22
  • 打赏
  • 举报
回复
文件不是elf或者不是板子上可执行的程序
把它拷到你的pc上
file命令查看之
meiky 2012-02-22
  • 打赏
  • 举报
回复
把busy box 重新编译成静态的,现在文件系统可以进入,但又出现:
-/bin/sh: ./test: Permission denied
权限问题???? 我早已chmod 777 test
这么好安静。。高手????
meiky 2012-02-22
  • 打赏
  • 举报
回复
没有load进去应该怎么办。能不能说清楚点,暂时板子上没有ldconfig可以用。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧