背景
我想针对特定版本的 zlib 构建 OpenSSL,以便我的所有代码都由我构建。我对我使用的许多库都这样做,这样我就不会在不同版本的操作系统上得到不同的行为。我知道这不是绝对必要的,但我想要。
我做了什么
我在 ~/zlib/zlib-1.2.7 中构建了 zlib,并将 zlib 安装到 ~/zlib/lib 和 ~/zlib/include。
(请注意,我通过将我的工作目录替换为“~”来简化了这篇文章中的所有路径)
我已经构建了 openssl 将这些参数传递给 ./config
--with-zlib-lib=~/zlib/lib
--with-zlib-include=~/zlib/include
当我构建 openssl 时,我可以看到适当的 -I 参数正在传递给 GCC
./config --prefix=~/openssl --openssldir=openssl/ssl threads zlib-dynamic shared --with-zlib-lib=~/zlib/lib --with-zlib-include=~/zlib/include && make && make install
. . .
...many lines of output...
. . .
gcc -I.. -I../.. -I../modes -I../asn1 -I../evp -I../../include -I/home/ubuntu/zlib/include -fPIC -DOPENSSL_PIC -DZLIB_SHARED -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -c -o cm_pmeth.o cm_pmeth.c
OpenSSL 构建成功。
问题
我检查了与命令链接的 zlib 版本ldd libssl.so
。
ubuntu@lemming012:~/ben/code/optimiser/libs/3rdParty/openssl/lib$ ldd libssl.so
linux-vdso.so.1 => (0x00007fff3e7ff000)
libcrypto.so.1.0.0 => /lib/x86_64-linux-gnu/libcrypto.so.1.0.0 (0x00007f
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f289bcab000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f289baa6000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f289b88f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f289c6c7000)
我希望看到 ldd 在列表中报告我自己的 libz 文件。
相反,ldd 报告 libssl 链接到我系统安装的 libz 版本。如果我在同一个目录中运行 ldd 之前将我自己的版本 libz.so.1 复制到 libssl 'lib' 目录中,结果是相同的。
问题
我做错了什么?如何让 OpenSSL 链接到我的 zlib 版本而不是系统上安装的版本?
环境
uBuntu 13.04 x64 编译与 GCC 构建与 Make