簡體   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