Я использую журнал регистрации log4cxx. Мне нужно связать со своей статической версией, чтобы избежать дополнительных бинарных зависимостей. Я использую его в своей динамической библиотеке. По умолчанию сборка log4cxx создает статическую библиотеку, но я не могу связать ее, потому что она была скомпилирована без флага -fPIC. Поэтому я изменил log4cxx Bulding как:Как правильно построить статическую библиотеку?
CPPFLAGS="-fPIC -static" ./configure
make
В результате я получил liblog4cxx.a
что я могу связать с моей .so библиотеки. Связывание было сделано 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 -> undefined). –