Boost 1.59连接器错误
Boost 1.59 linker error
我在旧版本的Ubuntu 11.04上安装了Boost库(特别是1.59版本),我已经将其设置为安装在我的主目录中的以下位置:
${HOME}/boost_1_59
我正在使用下面的CMake文件来编译和构建我正在工作的程序:
cmake_minimum_required( VERSION 2.8 )
project( myproject C CXX )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin )
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -pthread" )
set( BOOST_ROOT "/home/user/boost_1_59" )
set( BOOST_MIN_VERSION "1.59" )
set( Boost_USE_MULTITHREADED ON )
set( Boost_USE_STATIC_LIBS ON )
find_package( Boost ${BOOST_MIN_VERSION} COMPONENTS filesystem thread system REQUIRED )
if( Boost_FOUND )
set( BOOST_LIBRARYDIR "/home/user/boost_1_59/lib" )
set( BOOST_INCLUDEDIR "/home/user/boost_1_59/include" )
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
add_executable( TorcPause main.cpp )
target_link_libraries( TorcPause ${Boost_LIBRARIES} )
endif()
当我尝试编译项目时,我得到以下链接器错误(我总是擦除"构建"目录,以确保CMake不从缓存中提取,因为这是一个已知的问题,当尝试使用CMake的boost时):
CMakeFiles/TorcPause.dir/TorcPause.cpp.o: In function `boost::asio::error::get_system_category()':
TorcPause.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[boost::asio::error::get_system_category()]+0x5): undefined reference to `boost::system::system_category()'
CMakeFiles/TorcPause.dir/TorcPause.cpp.o: In function `boost::thread_exception::thread_exception(int, char const*)':
TorcPause.cpp:(.text._ZN5boost16thread_exceptionC2EiPKc[_ZN5boost16thread_exceptionC5EiPKc]+0x14): undefined reference to `boost::system::system_category()'
CMakeFiles/TorcPause.dir/TorcPause.cpp.o: In function `boost::condition_error::condition_error(int, char const*)':
TorcPause.cpp:(.text._ZN5boost15condition_errorC2EiPKc[_ZN5boost15condition_errorC5EiPKc]+0x14): undefined reference to `boost::system::system_category()'
CMakeFiles/TorcPause.dir/TorcPause.cpp.o: In function `boost::thread::start_thread()':
TorcPause.cpp:(.text._ZN5boost6thread12start_threadEv[boost::thread::start_thread()]+0x15): undefined reference to `boost::thread::start_thread_noexcept()'
CMakeFiles/TorcPause.dir/TorcPause.cpp.o: In function `boost::thread::join()':
TorcPause.cpp:(.text._ZN5boost6thread4joinEv[boost::thread::join()]+0x6d): undefined reference to `boost::thread::join_noexcept()'
libTorcIOManager.a(IOManager.cxx.o): In function `__static_initialization_and_destruction_0(int, int)':
IOManager.cxx:(.text+0x2fd): undefined reference to `boost::system::generic_category()'
IOManager.cxx:(.text+0x309): undefined reference to `boost::system::generic_category()'
IOManager.cxx:(.text+0x315): undefined reference to `boost::system::system_category()'
libTorcIOManager.a(IOManager.cxx.o): In function `boost::system::error_code::error_code()':
IOManager.cxx:(.text._ZN5boost6system10error_codeC2Ev[_ZN5boost6system10error_codeC5Ev]+0x17): undefined reference to `boost::system::system_category()'
libTorcConnection.a(Connection.cxx.o): In function `__static_initialization_and_destruction_0(int, int)':
Connection.cxx:(.text+0x17c0): undefined reference to `boost::system::generic_category()'
Connection.cxx:(.text+0x17cc): undefined reference to `boost::system::generic_category()'
Connection.cxx:(.text+0x17d8): undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
make[2]: *** [../bin/TorcPause] Error 1
make[1]: *** [CMakeFiles/TorcPause.dir/all] Error 2
make: *** [all] Error 2
正如你可以从我的CMake文件中看到的,我包括了boost系统库,所以我不确定我做错了什么,或者我需要改变什么才能使这个工作正常。
Update # 1:下面是运行make VERBOSE=1
的输出CMake,命令行输出
有两个问题:
-
您的链接器调用显示链接器不搜索自定义库目录中的库。因此,您需要添加
LINK_DIRECTORIES(${BOOST_LIBRARYDIR})
-
此外,由于启用了
Boost_USE_MULTITHREADED
,因此boost库(libboost_...-mt.a
)的多线程版本需要存在于自定义库目录中。正如您所述,这些不存在,因此您需要重新编译启用多线程支持的boost。
相关文章:
- MySQL C++连接器链接错误
- Visual Studio 2017 中的 MySQL 连接器/C++ 错误"Unresolved external symbol _get_driver_instance"
- 循环中的MySQL连接器/C 错误
- MySQL C++连接器程序抛出错误 15
- MySQL 连接器错误,将代码从 Java 转换为 C++
- 从源代码构建 MySQL 连接器/C++(找不到 Boost 库错误)
- "int8_t":尝试将MySQL CPP连接器连接到Visual Studio 2010时Config.h中的重新定义错误
- Mysql c++ 连接器错误
- MySQL / C ++连接器错误:使用旧的(4.1.1之前)身份验证协议的连接被拒绝
- MySQL / C ++连接器错误:libmysqlcppconn.so.7:无法打开Sahred目标文件:没有这样的文
- 连接器/C++-必要的库+错误
- MySQL C++连接器MySQL_Prepared_Statement::getUpdateCount错误
- mysql c++连接器错误:连接器命令失败,退出代码为1
- MySQL:"Commands out of Sync"错误(C 连接器)
- Boost 1.59连接器错误
- 使Boost连接器错误
- Eclipse CDT中的POSIX IPC连接器错误
- 苹果Mach O连接器错误
- c++ MySQL连接器链接错误
- 编译mysql连接器c++与mingw,编译错误