【发布时间】:2014-01-19 03:37:58
【问题描述】:
我正在尝试使用 cmake 编译我的项目,但我无法克服链接器错误。我已经通过 apt-get install 和手动在我的主文件夹中安装了 boost,但链接器看不到它们中的任何一个。
这是我的 cmake 列表文件:
project(SignalAnalyzerRQ)
cmake_minimum_required(VERSION 2.8)
set(Boost_INCLUDE_DIR /home/natalia/software/boost_1_55_0)
set(Boost_LIBRARY_DIR /home/natalia/software/boost_1_55_0/stage/lib)
find_package(Boost COMPONENTS system thread timer chrono REQUIRED)
include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIR})
set(CMAKE_CXX_FLAGS "-lboost_system -lboost_timer -lboost_chrono -lrt -lboost_thread -lboost_thread -lgsl -lgslcblas")
add_definitions(${CMAKE_CXX_FLAGS})
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
这是它给我的错误的一部分:
CMakeFiles/SignalAnalyzerRQ.dir/Tester.cpp.o: In function `boost::thread_exception::thread_exception(int, char const*)':
Tester.cpp:(.text._ZN5boost16thread_exceptionC2EiPKc[_ZN5boost16thread_exceptionC5EiPKc]+0x14): undefined reference to `boost::system::system_category()'
CMakeFiles/SignalAnalyzerRQ.dir/Tester.cpp.o: In function `boost::detail::thread_data_base::thread_data_base()':
Tester.cpp:(.text._ZN5boost6detail16thread_data_baseC2Ev[_ZN5boost6detail16thread_data_baseC5Ev]+0x24): undefined reference to `vtable for boost::detail::thread_data_base'
CMakeFiles/SignalAnalyzerRQ.dir/Tester.cpp.o: In function `boost::thread::start_thread()':
Tester.cpp:(.text._ZN5boost6thread12start_threadEv[_ZN5boost6thread12start_threadEv]+0x15): undefined reference to `boost::thread::start_thread_noexcept()'
CMakeFiles/SignalAnalyzerRQ.dir/Tester.cpp.o: In function `boost::thread::~thread()':
Tester.cpp:(.text._ZN5boost6threadD2Ev[_ZN5boost6threadD5Ev]+0x15): undefined reference to `boost::thread::detach()'
CMakeFiles/SignalAnalyzerRQ.dir/Tester.cpp.o: In function `boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf2<void, Tester, int, int>, boost::_bi::list3<boost::_bi::value<Tester*>, boost::_bi::value<int>, boost::_bi::value<int> > > >::~thread_data()':
Tester.cpp:(.text._ZN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf2Iv6TesteriiEENS2_5list3INS2_5valueIPS6_EENS9_IiEESC_EEEEED2Ev[_ZN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf2Iv6TesteriiEENS2_5list3INS2_5valueIPS6_EENS9_IiEESC_EEEEED5Ev]+0x1f): undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
CMakeFiles/SignalAnalyzerRQ.dir/Tester.cpp.o:(.rodata._ZTIN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf2Iv6TesteriiEENS2_5list3INS2_5valueIPS6_EENS9_IiEESC_EEEEEE[_ZTIN5boost6detail11thread_dataINS_3_bi6bind_tIvNS_4_mfi3mf2Iv6TesteriiEENS2_5list3INS2_5valueIPS6_EENS9_IiEESC_EEEEEE]+0x10): undefined reference to `typeinfo for boost::detail::thread_data_base'
CMakeFiles/SignalAnalyzerRQ.dir/Integrator.cpp.o: In function `Integrator::integral(std::map<float, float, std::less<float>, std::allocator<std::pair<float const, float> > >*)':
Integrator.cpp:(.text+0x5b): undefined reference to `gsl_set_error_handler_off'
Integrator.cpp:(.text+0x69): undefined reference to `gsl_integration_workspace_alloc'
Integrator.cpp:(.text+0x14a): undefined reference to `gsl_integration_qag'
Integrator.cpp:(.text+0x1b7): undefined reference to `gsl_set_error_handler'
(...)
LeastSquaresComparator.cpp:(.text+0x5c4): undefined reference to `boost::system::generic_category()'
LeastSquaresComparator.cpp:(.text+0x5d0): undefined reference to `boost::system::generic_category()'
LeastSquaresComparator.cpp:(.text+0x5dc): undefined reference to `boost::system::system_category()'
我没有在 cmake 列表中包含到 gsl 的路径,所以我理解为什么那里有未定义的引用,但我认为 boost 应该可以工作,但它没有。任何帮助将不胜感激。
【问题讨论】:
标签: boost linker cmake undefined-reference