前段时间帮助组内其他人解决了C-SDK交叉编译的问题,今天突然登录CSDN看到博客竟然一年没有更新了,今天就记录一下吧。
编译出来的执行文件在arm-linux下不能执行,最有可能的点就是交叉编译链没有找对,在Ubuntu的终端编译,用的还是Ubuntu下的gcc,并没有是使用你的交叉编译arm-gcc。
https://help.aliyun.com/document_detail/96623.html?spm=a2c4g.11186623.2.16.57b52cf0oIzUyY
这个是设备端C-SDK下载的路径,此次使用的是3.0.1
官方也有详细的Make编译说明
https://help.aliyun.com/document_detail/97558.html?spm=a2c4g.11186623.2.25.1d1b492bUgBvwT
正常情况下依照上面的教程应该是没有问题的,但是我们的项目比较特殊,之前的手顺也是从日本过来的,交叉编译链也是国外的厂商提供的,所以一些交叉编译的环境变量很重要。手顺里修改了tools/board/config.xxx.yyy文件,追加了一些交叉编译用的变量,所遇到的第一个坑就是没有正确的在终端给新追加的变量赋值,赋正确的值,只有这样才能找到正确的gcc和一些头文件和lib库。所以在做交叉编译时,一定要先知道想用的gcc在哪里,它的库和头文件在哪里,然后正确的环境变量。
第二个坑就是在修改后config.xxx.yyy就应该再次make reconfig一下,重新选择一下config.xxx.yyy 这样在make时才会使用到新加的那些变量,然后使用正确的GCC.
反正记住一句话,编译出来的可执行文件不能在arm环境下执行,那一定是没有正确的使用交叉编译链,那么一定是你的哪一步没有配对。(涉及到公司的东西,很细节的就不详细的说了,实际上在编译时卡住,我觉得最大的原因就是太坚信日本的手顺,SDK是阿里提供的,它也提供了完整的说明,详细的研究研究,应该不难编译出来.a文件)