2012-11-23 35 views
3

我想鏈接我的代碼與共享庫(「libX.so」),這取決於libcrypto.so。我安裝了libcrypto.so.1.0.0,但它似乎特別要求libcrypto.so.0.9.8。有沒有辦法讓它鏈接到1.0.0?我不能在我的系統(archlinux)上安裝0.9.8而不打破其他軟件包。未定義引用'[email protected]_0.9.8'

/usr/bin/ld: warning: libcrypto.so.0.9.8, needed by /usr/local/lib/libX.so, not found (try using -rpath or -rpath-link) 
/usr/local/lib/libX.so: undefined reference to `[email protected]_0.9.8' 
... 

編輯:

我也許應該補充更多的信息。我試過編譯openssl 0.9.8並安裝到前綴/ usr/local。但是,即使它似乎找到了這個庫,有建築時仍然錯誤:

/usr/local/lib/libX.so: undefined reference to `[email protected]_0.9.8' 
... 

libcrypto似乎來定義的:

$ nm /usr/local/ssl/lib/libcrypto.so.0.9.8 | grep SHA512 
000000000006f9b0 T SHA512 
... 

我使用下面的腳本來編譯:

export LD_LIBRARY_PATH+=:/usr/local/ssl/lib 
gcc -I/usr/local/include/ test.c -o test -lX 

這是LDD對libx中的輸出:

$ ldd /usr/local/lib/libX.so    
/usr/local/lib/libX.so: /usr/local/ssl/lib/libcrypto.so.0.9.8: no version information available (required by /usr/local/lib/libX.so) 
libssl.so.0.9.8 => /usr/local/ssl/lib/libssl.so.0.9.8 (0x00007f9c4e329000) 
libcrypto.so.0.9.8 => /usr/local/ssl/lib/libcrypto.so.0.9.8 (0x00007f9c4df99000) 
... 

回答

0

因爲最初的OpenSSL庫是使用版本腳本構建的。這是一個功能,因此您可以擁有不同版本的庫並仍然可以獲得正確的符號。

您可以添加自己看起來像這樣:

OPENSSL_0.9.8 { 
*; 
}; 

然後用--version腳本

鏈接

爲了使OpenSSL的做到這一點,你可能需要編輯Makefile。