当前位置: 技术问答>linux和unix
关于./xxx 提示not found问题
来源: 互联网 发布时间:2017-02-26
本文导语: 板子原来是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/ar...
板子原来是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就没问题,证明肯定还是库问题。应该放哪些库在什么地方呢?????救助???
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就没问题,证明肯定还是库问题。应该放哪些库在什么地方呢?????救助???
|
我对加载机制不熟,有2个猜测
猜测1
busybox带的加载器是3.4.5,检查到你的程序要的是更高版本的库,直接返回not found,根本不去找库
猜测2
你拷贝的库不对
我的经验是 执行4.1.1工具链 ,-v 查看版本
--with-sysroot后面的目录才是正确的库
猜测1
busybox带的加载器是3.4.5,检查到你的程序要的是更高版本的库,直接返回not found,根本不去找库
猜测2
你拷贝的库不对
我的经验是 执行4.1.1工具链 ,-v 查看版本
--with-sysroot后面的目录才是正确的库
|
1.你板子上的文件是否都是用4.1.1编译出来的,如果不是最好用同一款gcc编译。
2.你的busybox应该是静态编译的,如果不是请静态编译。
3.你的交叉编译环境是否配对了,你的交叉编译环境最好用4.1.1的gcc进行编译。
4.你用ldd或者readelf之类的工具看看你的test依赖关系,一般简单程序只是依赖libc而已,如果这样就检查一下你的libc是否是4.1.1编译出来的,板子上和你的环境中的libc是否一致。
只想到这么多了,其他的想不起来了。
2.你的busybox应该是静态编译的,如果不是请静态编译。
3.你的交叉编译环境是否配对了,你的交叉编译环境最好用4.1.1的gcc进行编译。
4.你用ldd或者readelf之类的工具看看你的test依赖关系,一般简单程序只是依赖libc而已,如果这样就检查一下你的libc是否是4.1.1编译出来的,板子上和你的环境中的libc是否一致。
只想到这么多了,其他的想不起来了。
|
你可以在宿主机上执行file test查看该文件需要哪一个库,然后把这个库文件拷贝到开发板根文件系统的/lib目录下,一般问题就会得到解决。