我使用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 - >未定义)。 –