build OpenSSL for current host

step0、参考

step1、安装依赖

所有时Terminal + Shell + GNU CoreUtils
下载时git
编译时gmakemakedependgcc / GCC | Clang / LLVMPerlToolSet
运行时glibc ( libc.solibdl.solibpthread.sold-linux-x86-64.so )

step2、使用git下载OpenSSL源码

git clone https://github.com/openssl/openssl.git

step3、进入openssl目录

cd openssl

step4、查看有哪些git分支

git branch -a

运行效果如下:

step5、切换到一个稳定的git分支

由于OpenSSL项目的master分支上提交的是开发代码,它可能不稳定。最好切换到最新的稳定版本分支上面, 最新的稳定版本分支是OpenSSL_1_1_1-stable

git checkout OpenSSL_1_1_1-stable

step6、查看当前git分支的源码

step7、配置编译参数

此工程与autotools创建的工程不一样,没有configureconfigure.acconfig.guess等文件,而是多了Configureconfig两个可执行的POSIX sh脚本。 这两个可执行的POSIX sh脚本就是用来配置编译参数的。用它们 配置后会产生gmake的配置文件Makefile

./Configure的使用格式如下:

./Configure [option]... <os/compiler>

os/compiler可以通过执行./Configure LIST命令获得。

如果你想交叉编译,就必须通过调用./Configure,指明os/compiler为目标平台。

./config的使用格式如下:

./config [option]...

./config可执行脚本的功能与autotools中的config.guess一样, 就是猜测当前环境中的os/compiler,然后调用./Configure

option说明
--help查看使用帮助
--prefix=DIR指定安装目录
--openssldir=DIR指定安装目录
--cross-compile-prefix=XX交叉编译工具链的前缀
-D<MACRO[=VALUE]>定义一个宏
-l<libraryName>指定需要的库名称
-L<linkDir>增加库文件搜索目录
-f<PIC>
-K<PIC>
no-ssl2禁用SSLv2协议
no-ssl3禁用SSLv3协议
no-ssl禁用SSL协议
no-tls禁用TLS协议
no-md2禁用MD2算法
no-md4禁用MD4算法
no-md5禁用MD5算法
no-mdc2禁用mdc2算法
no-ripemd禁用ripemd算法
[no-]des禁用DES算法
[no-]aes禁用AES算法
[no-]rc2禁用rc2算法
[no-]rc4禁用rc4算法
[no-]rc5禁用rc5算法
[no-]idea禁用IDEA算法
[no-]bf禁用Blowfish算法
[no-]cast禁用cast算法
[no-]camellia禁用camellia算法
[no-]dsa禁用DSA算法
[no-]rsa禁用RSA算法
[no-]ec禁用ec算法
[no-]ecdsa禁用ecdsa算法
[no-]dh禁用dh算法
[no-]ecdh禁用ecdh算法
[no-]asm是否使用汇编语言
[no-]async
[no-]shared控制是否要生成动态库
[no-]dso控制是否要调用其他动态库
[no-]comp
[no-]store
[no-]threads是否支持多线程的库
[no-]gmp是否支持gmp
[no-]krb5是否支持Kerberos 5
[no-]rfc3779启用/禁用实现X509v3证书的IP地址扩展
no-zlib不使用zlib压缩功能
zlib使用zlib静态库
zlib-dynamic使用zlib动态库
no-hw关闭硬件支持
no-engine关闭硬件支持

示例:

./config    shared no-ssl2 no-ssl3 no-comp no-hw no-engine
./Configure shared no-ssl2 no-ssl3 no-comp no-hw no-engine darwin64-x86_64-cc

step7、使用make进行编译、安装

make [option]... [VAR=VALUE]... [TARGET]...
VARVALUE示例说明
CCgcc |  clang指定C编译器
CFLAGS-O2 -v指定C编译器的参数
CPPcpp指定C预处理器
CPPFLAGS-I<includeDIR>指定C预处理器的参数
LDFLAGS-L<libDIR>指定C链接器的参数
LIBS-l<libName>指定C链接器要链接的库的名称

示例:

make CFLAGS='-O2 -v' && sudo make install