问题:在X86环境下编译没问题的HTTP工程想要进行交叉编译,链接的时候出现搜索到的库.so文件格式不对。
问题很明显,外部库没有进行交叉编译还是X86的格式,我们需要进行单独的编译并安装库,以openssl为例。
利用arm-none-linux-gnueabi-gcc交叉编译openssl,生成静态库文件libcrypto.a ,libssl.a
- 从openssl官网下载openssl最新版本openssl-1.0.2。下载地址:http://www.openssl.org/source/
- 导入交叉编译环境
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
- 解压openssl源码,进入目录,执行:
./config no-asm -shared --prefix=/usr/local/ssl-1.0.2/
image.png配置,--prefix为安装目录
配置完成后:手动修改生成的Makefile,并且找到有-m64的地方,全删之(共2处)
- 如有需要root权限安装则
sudo -s进入root即可
make & make install
备注:这里遇到arm-poky-linux-gnueabi-arm-poky-linux-gnueabi-gcc找不到的问题,一开始以为环境变量没配置好,仔细一看这个名字有问题,前面和后面的arm-none-linux-重复了,能找到这个工具链才怪。这种问题直接看Makefile,vim打开,查看编译器的配置
- 红框中的原来是这样的CC= $(CROSS_COMPILE)arm-poky-linux-gnueabi-gcc
而CROSS_COMPILE变量又是arm-poky-linux-gnueabi-,所以最后拼出来一个arm-poky-linux-gnueabi-arm-poky-linux-gnueabi-gcc奇怪的名字,删掉重复的部分就行了,问题产生原因还没找到。- 在qt-creater的pro文件中添加外部库的连接
LIBS += -L/usr/local/ssl-1.0.2 -lcrypto
这时就可以正常的交叉编译了
网友评论