Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Undefined reference to 'boost::system::generic_category()'?

Tags:

c++

boost

cmake

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.

like image 885
Auberotte Avatar asked Aug 13 '13 03:08

Auberotte


2 Answers

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).

like image 115
Mark Garcia Avatar answered Nov 13 '22 20:11

Mark Garcia


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.

like image 14
ViRuSTriNiTy Avatar answered Nov 13 '22 19:11

ViRuSTriNiTy