【发布时间】:2013-05-17 05:17:06
【问题描述】:
背景
我想针对特定版本的 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 构建成功。
问题
我通过ldd libssl.so 命令查看正在链接的zlib 版本。
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 链接到 my 版本的 zlib 而不是系统上安装的版本?
环境
uBuntu 13.04 x64 用 GCC 编译 使用 Make 构建
【问题讨论】: