目录
一、下载源码
二、编译安装
注意:本人所述都是基于:CentOS Linux release 7.4 的操作,其它发行版本不保证一样!
解压源码后,进入解压后的路径,如:cd openssl-1.0.2o,按如下步骤执行命令:
普通编译安装
./config --prefix=/home/yourInstallPath/x86 -fPIC no-shared no-asm
make -j10 && make install
交叉编译安装
./config --prefix=/home/yourInstallPath/x3399 -fPIC no-shared no-asm --cross-compile-prefix=aarch64-linux-gnu-
打开./config 生成的Makefile,将-m64选项全部删除掉,一共有两处,如果在x86机器进行交叉编译,不删除会报错。
make -j10 && make install
参数解释
--prefix 表示自定义安装路径,如果想安装在默认路径下,可以不使用这个参数;
-fPIC作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code), 则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的;
no-shared 表示不生成动态库,只生成静态库,如果想生成动态库使用shared参数(默认应该也是动态库)。no-asm 表示:Do not use assembler code。
--cross-compile-prefix 表示指定交叉编译器,需要提前安装配置好自己需要的交叉编译器。
注意事项
-cross-compile-prefix指定的编译器不是全称,比如我想使用的是aarch64-linux-gnu-gcc,但是执行交叉编译命令时,填写的是aarch64-linux-gnu-,后面的gcc不用写,会自动识别。
上面命令中的yourInstallPath替换成自己想要安装的路径。
如果普通编译和交叉编译先后进行,最好前一种编译后删除源码,再次解压后再进行后一种编译,或者分别解压两次到不同的路径后分别执行不同的编译,因为我遇到过在同一个路径下先编译x86的,完成后make clean,再编译arm的aarch64,会报错一种:error adding symbols: File in wrong format的错误。
三、安装成功示例
从图中可以看出,指定安装路径下的include下生成了头文件,lib下生成了 libcrypto.a 和 libssl.a 两个静态库文件,这样就可以把库文件和头文件应用到自己的工程中去了!
四、参考资料