Undefined reference to 'boost::system::generic

2020-02-06 02:14发布

it seems that i am unable to see the obvious. I wanted to use some Boost library features for my project and know i am getting these nice errors all of a sudden:

Linking CXX executable ATFOR CMakeFiles/ATFOR.dir/stdafx.cc.o: In function __static_initialization_and_destruction_0(int, int)': stdafx.cc:(.text+0x3c): undefined reference toboost::system::generic_category()' stdafx.cc:(.text+0x48): undefined reference to boost::system::generic_category()' stdafx.cc:(.text+0x54): undefined reference toboost::system::system_category()' CMakeFiles/ATFOR.dir/Main.cc.o: In function __static_initialization_and_destruction_0(int, int)': Main.cc:(.text+0x29d): undefined reference toboost::system::generic_category()' Main.cc:(.text+0x2a9): undefined reference to boost::system::generic_category()' Main.cc:(.text+0x2b5): undefined reference toboost::system::system_category()' collect2: error: ld returned 1 exit status

Here you find my CMakeLists.txt, headers, and main: http://pastie.org/8231509
As you can see, i tried a lot playing around with the CMakeLists and i am pretty sure that i have all headers my project requires. Anyways, i've never had such errors before and i really appreciate any suggestions/solutions about what's wrong here since i don't have any ideas left for now. Thx in advance.

标签: c++ boost cmake
4条回答
淡お忘
2楼-- · 2020-02-06 02:38

Ok, for those interested, the answer of Mark Garcia was a good call but what's more important here is that you need to explicitly link the libs you want from boost like

TARGET_LINK_LIBRARIES(ATFOR ${OpenCV_LIBS} curl ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY})

All other options i tried and read about didn't work me, don't know why but i hope this helps someone.

查看更多
\"骚年 ilove
3楼-- · 2020-02-06 02:43

The "system" lib is missing in the linking stage. My config is as follows and it fixes the error:

find_package(Boost 1.55.0 REQUIRED COMPONENTS system filesystem)

include_directories(... ${Boost_INCLUDE_DIRS})

link_directories(... ${Boost_LIBRARY_DIRS})

target_link_libraries(... ${Boost_LIBRARIES})

Note that using only

find_package(Boost 1.55.0 REQUIRED)

does not work as ${Boost_LIBRARIES} won't be available then.

查看更多
ら.Afraid
4楼-- · 2020-02-06 02:44

Check if you have the correct build (gcc, msvc...) of your boost libraries. I had this error when I tried linking a project using mingw with libraries built for msvc. If it is different, try building it for the platform you are using in your project.

The first time I used Boost I built it with default parameters resulting in libraries built for msvc, even though I was using mingw for my project. However CMake did find headers and libraries and everything seemed ok until I started using library features and compiling, that resulted in error mentioned by OP.

Rebuilding boost to toolset=gcc solved it (I was using Windows, CMake + MinGW).

查看更多
冷血范
5楼-- · 2020-02-06 02:47

You must explicitly add the system library for it to be linked into your program

find_package(Boost REQUIRED COMPONENTS system)
#                                      ^^^^^^ this :)

This must also be done for other Boost libraries that are built separately (regex, thread, etc.) (see here).

查看更多
登录 后发表回答