Boost logging - getting unresolved symbol

2019-08-10 22:04发布

I am a novice to cmake and boost so this question might be missing something obvious:

I am building a project with cmake on linux (ubuntu) and I am trying to use boost logging in that project. Here is what I do to generate the 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"

Compile goes through fine. (Some of these flags may be overkill -- I should only need the CMAKE_EXE_LINKER_FLAGS).

When I run the executable, I get the following unresolved reference:

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

What flags am I missing? My boost library is set up and LD_LIBRARY_PATH points to the right location.

When I manually built a test program using the same linker flags, it compiles and runs fine so boost is installed correctly. I hope I have not missed the obvious.

(Moved question from the GNU Radio mailing list -- sorry if you are reading this post for a second time).

标签: boost cmake
2条回答
Lonely孤独者°
2楼-- · 2019-08-10 22:37

I believe the order of libraries in the linker command line in -DCMAKE_EXE_LINKER_FLAGS is incorrect. boost_log_setup depends on boost_log, so boost_log_setup should go first.

查看更多
3楼-- · 2019-08-10 22:38

You seem to be linking against the non-multithreaded version:

-lboost_log

but the run-time linker seems to explicitely look for the multithreaded variant (the Boost doc site on that):

_ZN5boost3log11v2_mt_posix3aux25unhandled_exception_countEv
                  ^^

My guess hence is that you should try linking with

-lboost_log_mt

but the question whether that is right or not depends too much on your individual project to make it possible for me to clearly answer this.

查看更多
登录 后发表回答