简体   繁体   English

CMake无法找到boost_asio

[英]CMake is unable to find boost_asio

I am trying to install and use Boost 1.60.0 in my new C++ project. 我正在尝试在新的C ++项目中安装和使用Boost 1.60.0。 (I use Ubuntu, CLion and CMake for developing and building). (我使用Ubuntu,CLion和CMake进行开发和构建)。

What have I done? 我做了什么?

  1. I downloaded Boost from the link provided on the website. 我从网站上提供链接下载了Boost。
  2. Extracted into /devenv/boost160 ( /devenv/boost160 is the root, after I renamed the original folder) 提取到/devenv/boost160/devenv/boost160是根,在我重命名原始文件夹后)
  3. I ran ./bootstrap.sh from /devenv/boost160 (everything went ok; according to their official documentation , running this without arguments, takes the output into /usr/local ) and it went smoothly. 我从/devenv/boost160运行./bootstrap.sh (一切正常;根据他们的官方文档 ,不带参数运行此命令,将输出输出到/usr/local ),并且运行顺利。
  4. I created a CLion project and added the following to CMakeLists.txt . 我创建了一个CLion项目,并将以下内容添加到CMakeLists.txt

set(BOOST_ROOT /usr/local/include/boost)
set(BOOST_LIBRARYDIR /usr/local/lib)
set(Boost_USE_MULTITHREAD ON)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_DEBUG ON)

find_package(Boost 1.60.0 REQUIRED COMPONENTS asio date_time)
IF (Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIR})
endif()

  1. I ran the CLion's Build command and I got the following output, basically saying that it's unable to find boost_asio . 我运行了CLion的Build命令,得到了以下输出,基本上是说它找不到boost_asio

/devenv/clion-1.1/bin/cmake/bin/cmake --build /home/victor/.clion11/system/cmake/generated/50ae3d2f/50ae3d2f/Debug0 --target all -- -j 8
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:549 ] _boost_TEST_VERSIONS = 
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:551 ] Boost_USE_MULTITHREADED = TRUE
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:553 ] Boost_USE_STATIC_LIBS = ON
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:555 ] Boost_USE_STATIC_RUNTIME = ON
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:557 ] Boost_ADDITIONAL_VERSIONS = 
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:559 ] Boost_NO_SYSTEM_PATHS = 
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:611 ] Declared as CMake or Environmental Variables:
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:613 ]   BOOST_ROOT = /usr/local/include/boost
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:615 ]   BOOST_INCLUDEDIR = 
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:617 ]   BOOST_LIBRARYDIR = /usr/local/lib
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:619 ] _boost_TEST_VERSIONS = 
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:712 ] location of version.hpp: /usr/local/include/boost/version.hpp
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:736 ] version.hpp reveals boost 1.60.0
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:822 ] guessed _boost_COMPILER = -gcc48
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:832 ] _boost_MULTITHREADED = -mt
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:875 ] _boost_RELEASE_ABI_TAG = -s
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:877 ] _boost_DEBUG_ABI_TAG = -sd
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:931 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/lib/x86_64-linux-gnu;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH_boost_LIBRARY_SEARCH_DIRS_DEBUG   = /usr/lib/x86_64-linux-gnu;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:1043 ] Searching for ASIO_LIBRARY_RELEASE: boost_asio-gcc48-mt-s-1_60;boost_asio-gcc48-mt-s;boost_asio-mt-s-1_60;boost_asio-mt-s;boost_asio
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:343 ]  Boost_LIBRARY_DIR_RELEASE = /usr/lib/x86_64-linux-gnu _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/lib/x86_64-linux-gnu;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:1085 ] Searching for ASIO_LIBRARY_DEBUG: boost_asio-gcc48-mt-sd-1_60;boost_asio-gcc48-mt-sd;boost_asio-mt-sd-1_60;boost_asio-mt-sd;boost_asio-mt;boost_asio
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:343 ]  Boost_LIBRARY_DIR_DEBUG = /usr/lib/x86_64-linux-gnu _boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/lib/x86_64-linux-gnu;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:1043 ] Searching for DATE_TIME_LIBRARY_RELEASE: boost_date_time-gcc48-mt-s-1_60;boost_date_time-gcc48-mt-s;boost_date_time-mt-s-1_60;boost_date_time-mt-s;boost_date_time
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:343 ]  Boost_LIBRARY_DIR_RELEASE = /usr/lib/x86_64-linux-gnu _boost_LIBRARY_SEARCH_DIRS_RELEASE = /usr/lib/x86_64-linux-gnu;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:1085 ] Searching for DATE_TIME_LIBRARY_DEBUG: boost_date_time-gcc48-mt-sd-1_60;boost_date_time-gcc48-mt-sd;boost_date_time-mt-sd-1_60;boost_date_time-mt-sd;boost_date_time-mt;boost_date_time
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:343 ]  Boost_LIBRARY_DIR_DEBUG = /usr/lib/x86_64-linux-gnu _boost_LIBRARY_SEARCH_DIRS_DEBUG = /usr/lib/x86_64-linux-gnu;NO_DEFAULT_PATH;NO_CMAKE_FIND_ROOT_PATH
-- [ /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:1151 ] Boost_FOUND = 1
CMake Error at /devenv/clion-1.1/bin/cmake/share/cmake-3.3/Modules/FindBoost.cmake:1245 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.60.0

  Boost include path: /usr/local/include

  Could not find the following static Boost libraries:

          boost_asio

  Some (but not all) of the required Boost libraries were found.  You may
  need to install these additional Boost libraries.  Alternatively, set
  BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT
  to the location of Boost.
Call Stack (most recent call first):
  CMakeLists.txt:12 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/victor/.clion11/system/cmake/generated/50ae3d2f/50ae3d2f/Debug0/CMakeFiles/CMakeOutput.log".
make: *** [cmake_check_build_system] Error 1

How can I use Boost 1.60.0 in my project given my configuration? 给定配置后,如何在项目中使用Boost 1.60.0? Thank you! 谢谢!

Boost.Asio is a header-only library. Boost.Asio是仅标头的库。 The standard CMake function to locate Boost components (FindBoost.cmake) considers only components with pre-built libraries as components, assuming that the header-only components are installed completed with the rest of Boost headers. 定位Boost组件的标准CMake函数(FindBoost.cmake)仅将带有预构建库的组件视为组件,前提是仅头文件的组件已与其余的Boost头文件一起安装。 So you should use find_package(Boost 1.60.0 REQUIRED date_time) (date_time actually has pre-built library and can be located by the FindBoost.cmake). 因此,您应该使用find_package(Boost 1.60.0 REQUIRED date_time) (date_time实际上具有预先构建的库,可以由FindBoost.cmake定位)。

I'd say that FindBoost.cmake could be enhanced to hide difference between header-only libraries and the real, pre-built ones for application developers. 我想说,可以增强FindBoost.cmake的功能,以隐藏仅标头的库与真正的,为应用程序开发人员预先构建的库之间的差异。 But right now it's the responsibility of the latters. 但是现在这是后者的责任。

Edit Regarding the error with system_category: you need Boost.System library as well, so the find_package invocation should look like find_package(Boost 1.60.0 REQUIRED date_time system) and then use Boost_SYSTEM_LIBRARY in target_link_libraries . 编辑关于与system_category错误:你需要Boost.System库为好,所以find_package调用应该像find_package(Boost 1.60.0 REQUIRED date_time system) ,然后在使用Boost_SYSTEM_LIBRARY target_link_libraries Unfortunately it seems that Boost still uses it's own implementation of system_category while the latter was standardized in C++11 不幸的是,Boost似乎仍使用它自己的system_category实现,而后者在C ++ 11中标准化

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM