2016-11-07 85 views
1

我已經創建了一個名爲a.so的共享對象,並且它與在c/C++(linux)中開發的可執行文件完美協作。該共享對象提供了一些用於集成到外部軟件中的功能。以下是此共享對象的一些特點:未定義的引用共享對象Linux [C++]

  • 進行溝通與RS232
  • TCP/IP + SSL通信設備與服務器

現在我創建JNI封裝(b.so)上述共享對象的和使用該命令來打開共享對象,並創建一個處理程序:

的dlopen(FILE_NAME,RTLD_LAZY | RTLD_GLOBAL):

但它給我的錯誤無法加載LIB:/usr/lib/a.so - [/usr/lib/a.so:未定義的符號:EVP_cleanup]

EVP_cleanup在a.so使用,是openssl/evp.h頭文件的一部分。

我試圖鏈接b.so中的ssl和加密庫,但輸出與上面相同。

有人可以給我建議或替代方法嗎?

感謝

問候

回答

2

看來,你已經將自己的代碼只能與libssl.so

您還必須明確鏈接到libcrypto.soEVP_cleanup()libcrypto.so中定義。

objdump是一個有用的工具,用於確定缺少文檔時需要鏈接的內容。

$ objdump -T /usr/lib64/libcrypto.so | grep EVP_cleanup 
000000000012f5e0 g DF .text 0000000000000054 libcrypto.so.10 EVP_cleanup 
+0

謝謝! 它解決了這個問題。 – user391318