关于openssl的交叉编译

本文详细介绍了在不同架构下(如Hi3559A和hisiv500)使用openssl v1.1.1b版本进行交叉编译的过程。通过调整CROSS_COMPILE和CC环境变量,以及使用Configure脚本指定目标平台特性,成功解决了32位和64位编译器兼容性问题。同时,针对hisiv500编译器不支持GNU ucontext库的情况,采用no-async选项避免了链接错误。

最近有个平台软件模块需要依赖openssl,于是去openssl的官方网站上下载了最新的版本,v1.1.1b版本。

解压之后,发现配置编译,可以使用./config或者./Configure来完成。

网上也查了一些交叉编译的说明,经常在config之后,但是大都还要手动的修改makefile才行。

这就让我这种需要为N个交叉编译环境提供平台库文件的人头疼了。

但是仔细一想,openssl这种用途如此广的开源库,在交叉编译应该做得很好才对啊!

于是打开config脚本,稍微研究了一下,其实交叉编译也是可以配置的,并不需要config之后,再手动改makefile。

./config no-asm shared --prefix=/home/xxx/git_base/openssl/release/himix100 CROSS_COMPILE=/opt/xxx/aarch64-himix100-linux/bin/aarch64-himix100-linux- CC=gcc

只要修改环境变量CROSS_COMPILE和CC,即可完成编译的配置,这样我成功为Hi3559A编译了openssl库。

但是接下来,进行hisiv500编译器的配置时,又遇到问题了。

其一是,编译时,有很多告警,一看就是由于32位编译器与64位源码之间的不兼容告警。

其二是,hisiv500编译器是不提供GNU C的ucontext库的,所以最后一些tools的链接会有些函数找不到。

继续查看config文件,没有找到如何配置系统的位宽。

这时,尝试常规的Configure --help,原来Configure里面是可以配置的。

./Configure linux-generic32 no-asm shared no-async --prefix=/home/xxx/git_base/openssl/release/hisiv500/ CROSS_COMPILE=/opt/xxx/arm-hisiv500-linux/bin/arm-hisiv500-linux-uclibcgnueabi- CC=gcc

no-async的作用是不使用GNU的ucontext库

linux-generic32表示是32位操作系统

--prefix表示istall时的文件输出目录

如此一来,hisiv500也编译通过了。

下一步需要测试运行看看,是否有问题了。

 

转载于:https://www.cnblogs.com/djw316/p/10786173.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值