我会尽量详细解释遇到的困难。
最近我想在Ubuntu Mint 18 x64中使用boost库。所以我下载了它的最新版本1.62.0。 Sha256sum很好。然后我开始编译它" ./ bootstrap.sh"和" ./ b2"。最后复制到" / usr / local"使用" sudo ./b2 install"。到目前为止一切都很好。
我现在正在使用Clion,所以新工作是在Cmakelist.txt中添加库。以下代码是我添加的内容。
set(BOOST_ROOT /usr/local)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.62.0)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(BoostTest main.cpp)
target_link_libraries(BoostTest ${Boost_LIBRARIES})
endif()
我想解释的第一件事是我知道在CMake中设置一个特定的位置并不好,但没有它Cmake找不到它。所以我就是这样做的。而且,此时,CMake没有发布任何错误信息。这是我的hello_world演示。
#include <iostream>
#include <boost/thread/testable_mutex.hpp>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
我只是包含一个.hpp进行测试,没有别的。当我尝试运行它时。我得到了这些。
-- Boost version: 1.62.0
-- Configuring done
-- Generating done
-- Build files have been written to: /home/vita-nove/ClionProjects/BoostTest/cmake-build-debug
[ 50%] Building CXX object CMakeFiles/BoostTest.dir/main.cpp.o
[100%] Linking CXX executable BoostTest
CMakeFiles/BoostTest.dir/main.cpp.o: In function `__static_initialization_and_destruction_0(int, int)':
/usr/local/include/boost/system/error_code.hpp:221: undefined reference to `boost::system::generic_category()'
/usr/local/include/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()'
/usr/local/include/boost/system/error_code.hpp:223: undefined reference to `boost::system::system_category()'
collect2: error: ld returned 1 exit status
CMakeFiles/BoostTest.dir/build.make:94: recipe for target 'BoostTest' failed
make[3]: *** [BoostTest] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/BoostTest.dir/all' failed
make[2]: *** [CMakeFiles/BoostTest.dir/all] Error 2
CMakeFiles/Makefile2:79: recipe for target 'CMakeFiles/BoostTest.dir/rule' failed
make[1]: *** [CMakeFiles/BoostTest.dir/rule] Error 2
Makefile:118: recipe for target 'BoostTest' failed
make: *** [BoostTest] Error 2
有线的是我在外部库中找到了一些.hpp文件。它们都位于/ include / boost中。在/ usr / local / lib和/ usr / local / include / boost中,一切都按照我的预期显示出来。
抱歉我的英语不好。在花了将近一整天的搜索和测试后,我无法解决它。我不知道我错过了什么依赖或其他什么。无论如何,感谢您阅读本文,希望有人能帮忙。
答案 0 :(得分:2)
你必须告诉cmake你需要线程库
set(BOOST_ROOT /usr/local)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.62.0 COMPONENTS thread system) # <-- here
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(BoostTest main.cpp)
target_link_libraries(BoostTest ${Boost_LIBRARIES})
endif()