本文参考自:原博客链接
嵌入式开发中,有时执行程序时,明明目录下可执行文件存在,但却提示文件不存在。
root@petalinux:~# ./ccp
-sh: ./ccp: not found
root@petalinux:~# ls
app ccp driver user_scripts
bin dma lib
在上位机通过 readelf 查看该进程文件所以依赖的运行环境,检查相关路径是否存在对应的文件。
回到下位机,查看所需的库文件是否存在
root@petalinux:/lib# ls
ld-2.21.so libgcc_s.so.1 libnss_files-2.21.so
ld-linux.so.3 libm-2.21.so libnss_files.so.2
libBrokenLocale-2.21.so libm.so.6 libpthread-2.21.so
libBrokenLocale.so.1 libnl.so libpthread.so.0
libanl-2.21.so libnl.so.1 libresolv-2.21.so
libanl.so.1 libnl.so.1.1 libresolv.so.2
libc-2.21.so libnsl-2.21.so librt-2.21.so
libc.so.6 libnsl.so.1 librt.so.1
libcrypt-2.21.so libnss_compat-2.21.so libutil-2.21.so
libcrypt.so.1 libnss_compat.so.2 libutil.so.1
libdl-2.21.so libnss_dns-2.21.so modules
libdl.so.2 libnss_dns.so.2
看到库文件中有一个类似的ld-linux.so.3,没有ld-linux-armhf.so.3,另一个文件libc.so.6是存在的,因此尝试创建软连接,看看程序会不会正确执行。
root@petalinux:/lib# ln -s ld-linux.so.3 ld-linux-armhf.so.3
root@petalinux:/lib# ls
ld-2.21.so libdl.so.2 libnss_dns.so.2
ld-linux-armhf.so.3 libgcc_s.so.1 libnss_files-2.21.so
ld-linux.so.3 libm-2.21.so libnss_files.so.2
libBrokenLocale-2.21.so libm.so.6 libpthread-2.21.so
libBrokenLocale.so.1 libnl.so libpthread.so.0
libanl-2.21.so libnl.so.1 libresolv-2.21.so
libanl.so.1 libnl.so.1.1 libresolv.so.2
libc-2.21.so libnsl-2.21.so librt-2.21.so
libc.so.6 libnsl.so.1 librt.so.1
libcrypt-2.21.so libnss_compat-2.21.so libutil-2.21.so
libcrypt.so.1 libnss_compat.so.2 libutil.so.1
libdl-2.21.so libnss_dns-2.21.so modules
创建成功后程序成功执行:
root@petalinux:~# ./ccp
1
open: Bad address
我这里没有输入参数导致报错,但程序是在运行了,没有再报之前的not found错误。
另外的,有时可能的原因是库文件存在,但环境变量没有配置好。
本文参考自:原博客链接