2013-11-22 91 views
2

從源碼包構建時動態鏈接到這些庫的配置&產生OpenSSL的二進制make命令:編譯OpenSSL的二進制靜態

linux-vdso.so.1 => (0x00007fffa75fe000) 
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff7f79ab000) 
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff7f75e2000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007ff7f7bd2000) 

我的猜測是,如果我可以靜態鏈接到lib中的gcc,對其他共享庫的依賴關係也將消失。

問題是我如何獲得配置腳本來生成一個靜態鏈接二進制

這個過程與在Windows上構建過程相同嗎?

+0

另一種選擇是允許動態鏈接,但使用RPATH。爲此,請參閱[編譯和安裝|在OpenSSL wiki上使用RPATHs(https://wiki.openssl.org/index.php/Compilation_and_Installation#Using_RPATHs)。或者參閱Stack Overflow上的[使用RPATH生成OpenSSL?](http://stackoverflow.com/q/29858870)。 – jww

回答

0

我在搜索相同的東西時遇到了這篇文章。我不知道如何讓配置腳本執行此操作的正確語法,但這是我實現它的方式。

cd /tmp 
wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz 
tar -zxvf openssl-1.0.1e.tar.gz 
cd openssl-1.0.1e 
./config 

然後我說 「-static -static-libgcc的」 到的OpenSSL 1.0.1e/Makefile文件的CFLAG線(注意,這是在我跑./config中)。然後我像正常一樣構建它。

make INSTALL_PREFIX=/tmp/package-root install 

現在是靜態編譯

$ ldd /tmp/package-root/usr/local/ssl/bin/openssl 
     not a dynamic executable 
1

我是不是能夠得到上述溶液工作。鏈接器拋出有關_dlopen未定義的錯誤。

我在配置行添加了no-shared選項,並且這個內置的openssl靜態鏈接到openssl庫。

它仍然依賴於libsocket.so.2,linnsl.so,libz.so和的libc.so.1