第一步、问题描述:
其实a.out是一个输出hellow !!的基础函数
1、在主机通过交叉编译器 编译的应用程序,拷贝到开发板上,无法运行,提示
# ./a.out
-sh: ./a.out: not found
2、解决到not found 问题后
# ./a.out
Segmentation fault
第二步、解决问题
第一个问题,通过查资料得到的是确实运行的库导致的,可参考该博客/bin/sh: 命令:not found的解决办法
通过主机中的arm-linux-readelf -a a.out 查看所依赖的库文件,我这所需要的是/lib/ld-linux.so.3,确实开发板中是没有。
拷贝ld-linux.so.3库到开发板后,就遇到第二问题,一直是报错。
第二个问题,百度得到的资料 都是指向交叉编译器不一致导致,尝试了主机里面多个交叉编译器(别的cpu的交叉编译器),问题依旧存在,隐约觉得还是库文件的问题比较大,直到看到这边博客,给了灵感
ld-linux.so.3和/lib/ld-linux-armhf.so.3和程序not found解决方案
也做了一下软链接,最后运行成功
0 lrwxrwxrwx 1 root root 7 Jan 1 00:38 ld-linux.so.3 -> libc.so
0 lrwxrwxrwx 1 1000 1000 12 Dec 12 2022 ld-musl-arm.so.1 -> /lib/libc.so
0 lrwxrwxrwx 1 1000 1000 18 Dec 12 2022 libatomic.so -> libatomic.so.1.2.0
0 lrwxrwxrwx 1 1000 1000 18 Dec 12 2022 libatomic.so.1 -> libatomic.so.1.2.0
21 -rwxr-xr-x 1 1000 1000 21640 Dec 15 2022 libatomic.so.1.2.0
606 -rwxr-xr-x 1 1000 1000 620216 Dec 15 2022 libc.so
0 -rw-r--r-- 1 1000 1000 132 Dec 12 2022 libgcc_s.so
130 -rw-r--r-- 1 1000 1000 132632 Dec 15 2022 libgcc_s.so.1
0 drwxr-xr-x 3 1000 1000 0 Dec 15 2022 modules
0 -rw-r--r-- 1 1000 1000 95 Dec 15 2022 os-release
第三步,总结
1、buildroot中使用的是c库是musl,所以直接复制ld-linux.so.3,可能不成功(个人猜测)
2、buildroot制作的文件系统,最好用buildroot生成的交叉编译器去编译