提升日志记录 - 获取未解析的符号

时间:2015-10-16 16:18:32

标签: boost cmake

我是cmake和boost的新手所以这个问题可能会遗漏一些明显的东西:

我正在使用cmake在linux(ubuntu)上构建一个项目,我正在尝试在该项目中使用boost记录。以下是我生成Makefile的方法:

rm CMakeCache.txt
cmake ../ -DCMAKE_EXE_LINKER_FLAGS="-lboost_log -lboost_log_setup -lpthread -std=c++11" -DCMAKE_SHARED_LINKER_FLAGS="-lboost_log_setup -lboost_log -lpthread" -DCMAKE_MODULE_LINKER_FLAGS="-lboost_log_setup -lboost_log -lpthread" -DCMAKE_CXX_FLAGS="-DBOOST_LOG_DYN_LINK -std=c++11"

编译通过罚款。 (其中一些标志可能过度 - 我应该只需要CMAKE_EXE_LINKER_FLAGS。)

当我运行可执行文件时,我得到以下未解析的引用:

-- ImportError: /home/mranga/gr-msod-sensor/gr-msod_sensor/build/lib/libgnuradio-msod_sensor.so: undefined symbol: _ZN5boost3log11v2_mt_posix3aux25unhandled_exception_countEv

我错过了什么旗帜?我的boost库已设置,LD_LIBRARY_PATH指向正确的位置。

当我使用相同的链接器标志手动构建测试程序时,它会编译并运行正常,因此正确安装了boost。我希望我没有错过这一点。

(移动来自the GNU Radio mailing list的问题 - 对不起,如果您是第二次阅读此帖子。)

2 个答案:

答案 0 :(得分:1)

我认为-DCMAKE_EXE_LINKER_FLAGS中链接器命令行中的库顺序不正确。 boost_log_setup取决于boost_log,所以boost_log_setup应该先行。

答案 1 :(得分:0)

您似乎正在链接非多线程版本:

-lboost_log

但运行时链接器似乎明确地寻找多线程变体(the Boost doc site on that):

_ZN5boost3log11v2_mt_posix3aux25unhandled_exception_countEv
                  ^^

我的猜测是你应该尝试用

链接
-lboost_log_mt

但是,这是否正确的问题在很大程度上取决于你的个人项目,使我能够清楚地回答这个问题。