[英]How can one build openssl on ubuntu with a specific version of zlib?
背景
我想针对特定版本的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编译
答案结果是,您需要使用类似于以下语法设置rpath。 我在Makefile中做了我的,这是双'$'的原因。
LDFLAGS += -Wl,-rpath,'$$ORIGIN/../lib'
现在,我不一定需要在库(openssl)本身上执行此操作。 我可以在调用可执行文件上执行此操作。 如果库没有rpath,则接下来使用可执行文件上的rpath。 简而言之,我不需要强调ldd -r <library>
返回错误的路径,前提是ldd -r <executable>
返回正确的路径。
我可以使用以下命令通过库进行测试:
env LD_LIBRARY_PATH=$PWD ldd -r <library>
编译完可执行文件后,我可以验证这样的一切:
ldd -r <executable>
长话短说,一切都工作正常,不要挂掉ldd -r <library>
返回的内容,只需担心ldd -r <executable>
。
./config --prefix = / data / services / openssl-1.0.2g共享zlib -I / data / services / zlib-1.2.7 / include -L / data / services / zlib-1.2.7 / lib
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.