我是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的问题 - 对不起,如果您是第二次阅读此帖子。)
答案 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
但是,这是否正确的问题在很大程度上取决于你的个人项目,使我能够清楚地回答这个问题。