## 问题说明
我最近在对 F1C200S 的应用程序进行交叉编译的过程中,发现使用 gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi 这个交叉编译工具包编译出来的应用程序无法在F1C200S上面正常运行,会报 “Segmentation fault ”
查了一下论坛里面的帖子, https://whycan.com/t_3265.html ,这里面讨论到是因为工具链的问题,然后推荐了一款低版本的工具链:
http://sources.buildroot.net/toolchain-external-codesourcery-arm/arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
我做了一下验证,发现使用这个低版本的gcc工具链可以编译 hello.c ,能够正常运行了,但是在编译 lvgl9 的工程的时候 ,还会报错,可能是gcc版本比较低导致的。
于是我便找了一个 buildroot中使用的gcc-8.4.0 的版本,这个这个版本我验证测试也是能够正常编译,并导入到开发板上正常运行的,下面分享一下这个交叉编译工具包。
arm-buildroot-linux-gnueabi.tar.gz
离线
不同版本gcc编译的不兼容多说是因为gblic版本不同,同版本的gcc也可以用不同版本glibc,生成的gcc可能编译偶无法运行。
ARM平台终极解决办法:
1.用buildroot openwrt等生成gcc交叉编译工具, 它会自动编译系统rootfs kernel 等,再用这个gcc去编译应用。
2.如果buildroot编译过程 出现 错误就修改 kernel或者 package 里面的源码,添加补丁。
3.下载不同版本的buildroot替换package里面的内容修改软件版本,以适应新版本gcc。
4.大多数出现编译错误都可以在网上找到解决办法,或者kernel已经发布了补丁下载即可。
离线
应该是kernel编译用的是gcc-linaro-7.2.1
但是buildroot用的是openwrt这些。两者用的编译器不同。
离线
可能编译出来的C库版本不一样,还是要看系统用的什么编译器版本
离线