我使用log4cxx日誌庫。我需要鏈接到它的靜態版本,以避免額外的二進制依賴。我在我的動態庫中使用它。 log4cxx的默認構建生成靜態庫,但我無法鏈接它,因爲它是用w/o -fPIC標誌編譯的。如何正確構建靜態庫?
CPPFLAGS="-fPIC -static" ./configure
make
結果我收到了liblog4cxx.a
,我可以用我的.so庫鏈接:所以當我改變log4cxx BULDING。鏈接由Cmake完成,如下所示:
target_link_libraries(my_dynamic_lib log4cxx)
link_directories(relative_path_to_dir_where_liblog4cxx.a_lives)
一切看起來都很好,直到運行時。我無法加載my_dynamic_lib.so,因爲undefined symbol "logger"
請解釋我有什麼問題以及如何解決此問題。
感謝
嗨, 你確定庫liblog4cxx.a有記錄器符號定義嗎?我不知道你在使用什麼操作系統,但是如果你使用Linux,試試這個命令來檢查問題出在這個庫或其他地方: nm liblog4cxx.a | grep「logger」 這應該輸出在該庫上定義的符號名稱上有記錄器的符號。檢查記錄器是否被定義,符號類型(不應該是U - >未定義)。 –