Linux编译安装openssl升级系统openssl和生成系统动态连接库dynamic/shared libraries
openssl:多用途的命令行工具,各功能分别使用子命令实现
libcrypto:公共加密库(存放了各种加密算法)
libssl:ssl协议的实现
yum -y install perl gcc
wget -4 http://zlib.net/zlib-1.2.8.tar.gz
tar -zxvf zlib-1.2.8.tar.gz
cd zlib-1.2.8
./configure --shared
make
make install
cp libz.a /usr/local/lib
chmod 644 /usr/local/lib/libz.a
cp libz.so.1.2.8 /usr/local/lib
chmod 755 /usr/local/lib/libz.so.1.2.8
cp zlib.3 /usr/local/share/man/man3
chmod 644 /usr/local/share/man/man3/zlib.3
cp zlib.pc /usr/local/lib/pkgconfig
chmod 644 /usr/local/lib/pkgconfig/zlib.pc
cp zlib.h zconf.h /usr/local/include
chmod 644 /usr/local/include/zlib.h /usr/local/include/zconf.h
wget -4 --no-check-certificate https://www.openssl.org/source/openssl-1.0.1t.tar.gz
tar -zxvf openssl-1.0.1t.tar.gz
cd openssl-1.0.1t
./config --prefix=/usr shared zlib
make
make install
installing libcrypto.a
installing libssl.a
installing libcrypto.so.1.0.0
installing libssl.so.1.0.0
make[1]: Entering directory `/usr/lib64'
make[2]: Entering directory `/usr/lib64'
make[2]: Leaving directory `/usr/lib64'
make[2]: Entering directory `/usr/lib64'
make[2]: Leaving directory `/usr/lib64'
make[1]: Leaving directory `/usr/lib64'
cp libcrypto.pc /usr/lib64/pkgconfig
chmod 644 /usr/lib64/pkgconfig/libcrypto.pc
cp libssl.pc /usr/lib64/pkgconfig
chmod 644 /usr/lib64/pkgconfig/libssl.pc
cp openssl.pc /usr/lib64/pkgconfig
chmod 644 /usr/lib64/pkgconfig/openssl.pc
#-fPIC,在 Linux 下动态链接库,“标准” 的做法是编译成位置无关代码(Position Independent Code,PIC),然后链接成一个动态链接库,不加经常也能正常运行,只是创建 .so 的时候会有一个警告。
如果--prefix=/usr 目录是其他目录则需要使用ldconfig(一个动态链接库管理命令),为了让动态链接库为系统所共享
echo "/usr/local/openssl/lib">>/etc/ld.so.conf
ldconfig -v
shared no-shared
是否生成动态连接库。
echo '/usr/lib64' >> /etc/ld.so.conf
echo '/usr/local/lib64' >> /etc/ld.so.conf
使用ldconfig(一个动态链接库管理命令),为了让动态链接库为系统所共享
ldd $(which nginx)
ldd命令用于判断某个可执行的 binary 档案含有什么动态函式库
Linux下,动态库通常以.so(share object)结尾。(通常/lib和/usr/lib等目录下存在大量系统提供的以.so结尾的动态库文件)
Windows下,动态库常以.dll结尾。(通常C:\windows\System32等目录下存在大量系统提供的以.dll结尾的动态库文件)
动态库与静态库之间的区别
静态库是指编译连接时,把库文件的代码全部加入到可执行文件中,所以生成的文件较大,但运行时,就不再需要库文件了。即,程序与静态库编译链接后,即使删除静态库文件,程序也可正常执行。
动态库正好相反,在编译链接时,没有把库文件的代码加入到可执行文件中,所以生成的文件较小,但运行时,仍需要加载库文件。即,程序只在执行启动时才加载动态库,如果删除动态库文件,程序将会因为无法读取动态库而产生异常。
php
--with-openssl=DIR Include OpenSSL support (requires OpenSSL >= 0.9.8)
nginx
--with-pcre force PCRE library usage
--with-pcre=DIR set path to PCRE library sources
--with-zlib=DIR set path to zlib library sources
--with-openssl=DIR set path to OpenSSL library sources
apache
--with-ssl=PATH OpenSSL installation directory
--with-ssl=/usr/local/openssl 指向编译的目录,因为不但需要include还需要lib
yum -y install gcc perl make
wget -4 --no-check-certificate https://www.openssl.org/source/openssl-1.0.2-latest.tar.gz
tar -zxf openssl-1.0.2-latest.tar.gz
mv openssl-1.0.2? openssl2
如果--prefix=/usr 目录是其他目录则需要使用ldconfig(一个动态链接库管理命令),为了让动态链接库为系统所共享
echo "/usr/local/openssl/lib">>/etc/ld.so.conf #非必须
ldconfig -v
ldconfig做的这些东西都与运行程序时有关,跟编译没有关系。
1、./config
配置文件夹/usr/local/ssl/
ldd $(which openssl)
2、./config --prefix=/usr shared zlib
./config --prefix=/usr
配置文件夹/usr/ssl
ldd $(which openssl)
3、./config --prefix=/usr/local
配置文件夹/usr/local/ssl/
ldd $(which openssl)
3、./config -fPIC --prefix=/usr/local/openssl shared no-ssl2 no-ssl3
配置文件夹/usr/local/openssl/ssl
mv /usr/bin/openssl /usr/bin/openssl.old
mv /usr/include/openssl /usr/include/openssl.old
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
ln -sf /usr/local/openssl/lib/libcrypto.so.1.0.0 /lib/libcrypto.so.6
echo "/usr/local/openssl/lib" >>/etc/ld.so.conf
ldconfig -v
/usr/local/openss/ssl 配置文件
/usr/local/openss/lib 库文件
/usr/local/openss/include 头文件
./config --prefix=/usr/local/openssl
/usr/local/openssl/ssl
可执行文件放在/usr/local/openssl/bin
库文件放在/usr/local/openssl/lib
配置文件放在/usr/local/openssl/etc
其他资源在/usr/local/openssl/share/
make && make install
make uninstall
find / -name libssl.so
--with-openssl=
ln -s /usr/lib64/libssl.so /usr/lib
dynamic/shared libraries
/lib /lib64是内核级的
/usr/lib /usr/lib64是系统级的
/usr/local/lib /usr/local/lib64是用户级的