繁体   English   中英

如何使用特定版本的zlib在ubuntu上构建openssl?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM