linux交叉编译openssl,【经验分享】linux交叉编译 - openssl动态库

一、准备工作

1、到openssl官网下载最新版本openssl(如openssl-1.1.1d.tar.gz),上传到linux编译机上(如上传到目录/home/test下),并使用tar -xvf openssl-1.1.1d.tar.gz解压:

0c8f4e10816d0e6719a71880476fc58b.png

2、将要用到的交叉编译工具链解压后,找到交叉编译器所在路径(如果直接使用系统的gcc,可跳过这一步,但要保证gcc已安装):

85505101a9c27ff6863717721afb6aed.png

注意:gcc/g++/ar/ranlib/nm等文件的名字根据编译链的不同,文件名开头会有所不同,但文件名结尾是不变的,如arm架构比较常见的编译器是arm-linux-gcc

二、配置

进入openssl源码目录,运行如下配置命令

./config shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl

或./config  no-asm shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl

其中prefix 是安装目录,openssldir 是配置文件目录,shared 作用是生成动态链接库(即.so库)

注意:no-asm表示不使用汇编代码,如果编译有问题再加,没有问题就不加

5af9bcf6574d9c42fd1e12a5a5ec4d12.png

注意: 如果遇到64位的编译链,需要添加sysroot参数,用如下命令配置(+参考图片):

./config no-asm shared --prefix=/home/test/openssl --openssldir=/home/test/openssl/ssl --sysroot="{头文件所在路径}"

c1a6213a544d41346fb93795a04784a0.png

一般来说,头文件所在路径 与 XXX-gcc/g++/ar/nm等(XXX是交叉编译器名字的前缀)的所在目录不一样,在另外一个大目录下(如下图所示)

3cd04d190319fbdd5ab2fd0be8d83f2d.png

Tips:

可以先用find ./ -name *-gcc命令找到gcc/g++/ar/ranlib/nm等文件所在目录,那另一个目录就是头文件所在路径

89567c9de5f0ff942a102bc6434a0d7d.png

从上图看,gcc/g++/ar/ranlib/nm等文件在sysroots/x86_64-fslsdk-linux的某目录,所以头文件一般在另一个目录sysroots/ppc64e6500-fsl-linux下,且sysroots/ppc64e6500-fsl-linux下的usr/include目录下面有许多(不是一两个)头文件(也就是说--sysroot的值是usr/include所在的目录):

05644e3b92af6c3917c595b79cf0e24f.png

三、修改Makefile

配置完成后会在openssl源码目录下生成一个Makefile文件,打开查看内容,会看到CROSS_COMPILE的值是空的

116b011294d8489c08d4e8622cfd9199.png

这时要将CROSS_COMPILE的值修改为XXX-gcc所在绝对路径+XXX-gcc的文件名前缀(参考下图),也就是说要先找到交叉编译工具xxx-gcc/g++/ar/nm等文件所在路径(其中“XXX-”是交叉编译工具文件名前缀):

d33e393b257ec213c531d4aee1d4bf21.png

修改CROSS_COMPILE的值最终是为了修改arm-linux-xxx-gcc/ar/ranlib/nm等的路径,在比较老的openssl版本中,没有CROSS_COMPILE参数,需要修改如下5个变量的值 (注意下图所用的交叉编译工具不是跟前面的不一样,所以路径也不同):

ebaadb7e8d172013d0d5df8e40c72cf5.png

四、编译出库

修改完Makefile后就可以进行编译了,到openssl源码目录下,运行make命令:

openssl源码目录下,运行make命令:

make

如果没有报错,再运行make install

make install

在配置的openssl安装目录下/home/test/openssl找到lib目录,有如下两个文件:

libcrypto.so.1.1、libssl.so.1.1和软链接libcrypto.so、libssl.so

48b66452c2e7e141a799a539c3c1f55d.png

五、其他说明

1、交叉编译工具不是在任何环境上都可使用的,需要系统环境和编译工具匹配才可以,主要看CPU和指令集

2、如果不需要交叉编译工具,而是直接使用gcc,那么,配置生成Makefile后不需要修改Makefile(即跳过第三步),直接编译即可

3、如果make出错后修改了Makefile,记得make clean后再make

4、有的编译工具是32位的,如果在64位的linux机器上使用,可能会报如下错误,这时只要将Makefile中的-m64都删除,再进行编译即可

46c90518be0550bfc4e95630872eba05.png

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值