问题:在虚拟机里编写了一个输出hello,world的代码,代码很简单就不写了。使用交叉编译器编译之后生成可执行文件hello, 放在arm里执行输入 ./hello时却出现bash:No such file or directory。
解决:输入命令chmod 777 hello之后并不能解决问题。在虚拟机里可执行文件目录下输入readelf -a hello,可以看到输出很多信息,其中有一条是Requesting program interpreter: /lib/ld-linux.so.3。而在开发板的lib下也没有发现有ld-linux.so.3文件。说明提示信息说没有文件和目录并不是说没有hello文件,而是没有所需的库。所以我们在开发板里把所需文件加上即可。
在虚拟机里找到交叉编译器的lib文件,比如我的是Zedboard开发板,交叉编译器是arm-xilinx-linux-gnueabi-gcc。我的文件所在位置是programm/arm-xilinx-linux-gnueabi/libc/lib。文件所在位置由交叉编译器安装位置决定。在lib下可以发现 ld-linux.so.3文件,但是该文件是个链接符号。在lib下打开终端,输入命令ls -l可以发现ld-linux.so.3指向ld-2.13.so。我们复制虚拟机里lib里的ld-2.13.so,可以通过NFS粘到开发板的lib目录下,在开发板lib目录下输入ln -s ld-2.13.so ld-linux.so.3即可创建链接符号。发现即使这样做了可能仍不能解决问题,只是提示的错误变了。干脆把虚拟机lib里的所有文件都拷贝到开发板的lib目录下,链接符号无法复制选择跳过。按照虚拟机里的文件同样在开发板lib里创建所有的链接符号,命令为ln -s XX XX。虽然麻烦,但是这样之后,就可以顺利执行可执行文件了。
参考文章:http://www.360doc.com/content/17/0424/21/32407298_648343381.shtml