先讲一下,大概的背景,最近在做一个物联网项目,然后模组厂就丢给我一个sdk,和我说make -j8就可以编译了。
实际上我在安装完编译环境之后总是会出各种各样的问题,犯了很多重复编译的错误,对着搜索引擎搜来搜去,一点用都没有。
确认编译环境的操作系统
刚开始的时候我花了大量时间在windows环境下安装make 环境,只能说效果很差,到处都是错误,改了一个又冒出一个,这种情况下就要注意了,原厂给的代码存在大量错误的可能性很小,偶尔改一两个错误还是有可能的,但是连续改很多。大概是其他的问题不要在这钻牛角尖,徒耗时间了。
后来装了一个ubuntu22.04也是不行,大量报错。都是一些编译缺少文件的错误。后来经过询问sdk的人才了解到系统是16.04版本。(脸皮要厚该问就问)
但是我在16.04编译的时候依然出错,错误是最后固件加密的时候有一个叫做encrypt二进制脚本除了错误。
/crc_binary/encrypt: Syntax error: "("
刚开始的时候我还认为是这个文件使用的时候除了错于是在.mk文件中找来找去,发现并没有什么错误。搜了一下再项目中发现其实这个encrypt文件实际上是个二进制文件
然后使用fiie命令就是发现这个实际上是一个64位的二进制文件,
由于后面的交叉编译链需要32位环境,所以编译环境很明了了,64位16.04ubuntu安装32位兼容
更新软件包列表: 打开终端并运行以下命令来更新软件包列表:
sudo apt update
安装兼容性库: 运行以下命令来安装兼容性库和其他必要的软件包:
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386 zlib1g:i386
这些命令将为您的系统添加对 32 位架构的支持,并安装一些兼容性库,以便您能够在 64 位系统上运行 32 位程序。
验证安装: 安装完成后,您可以使用以下命令来验证是否正确安装了 32 位支持:
dpkg --print-foreign-architectures
确认交叉编译链版本(编译器版本)
交叉编译链的环境比较好确认,就是打开application.mk文件发现了备注的交叉编译链版本
4_9-2015q1
在ubuntu16.04使用apt 命令安装的默认就是这个版本的gcc-arm-none-eabi
sudo apt-get install gcc-arm-none-eabi
安装好后可以使用
arm-none-eabi-gcc -v
命令查看版本,
验证
做物联网项目经常换模组很正常,所以会经常搭建编译环境,一定要思路清晰,不然胡搜乱验证,一个星期搞不定环境还是让人听挫败的。