将交叉编译出的可执行程序放到目标板执行,运行时报 “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库的路径