step0、参考
step1、安装依赖
所有时 | Terminal + Shell + GNU CoreUtils |
下载时 | git |
编译时 | gmake、makedepend、gcc / GCC | Clang / LLVM、PerlToolSet |
运行时 | glibc ( libc.so 、libdl.so 、libpthread.so 、ld-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创建的工程不一样,没有configure
、configure.ac
、config.guess
等文件,而是多了Configure
和config
两个可执行的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]...
VAR | VALUE示例 | 说明 |
---|---|---|
CC | gcc | clang | 指定C编译器 |
CFLAGS | -O2 -v | 指定C编译器的参数 |
CPP | cpp | 指定C预处理器 |
CPPFLAGS | -I<includeDIR> | 指定C预处理器的参数 |
LDFLAGS | -L<libDIR> | 指定C链接器的参数 |
LIBS | -l<libName> | 指定C链接器要链接的库的名称 |
示例:
make CFLAGS='-O2 -v' && sudo make install