【问题标题】:cmake not finding boost linuxcmake没有找到boost linux
【发布时间】:2018-09-16 05:32:06
【问题描述】:

我正在尝试使用 Boost 中的 program_options 库。但是,CMake 可以也找不到提升...我做错了什么?

CMakeLists.txt:

cmake_minimum_required (VERSION 3.8)
project(myProject)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "-std=c++0x -g -Wall -O3")

set(CMAKE_CXX_FLAGS_DEBUG "-g")

include_directories ("${PROJECT_BINARY_DIR}")

SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "~/Documents/test/myProject/lib/boost_1_65_0")
SET(CMAKE_BOOST_ROOT ${CMAKE_BOOST_ROOT} "~/Documents/test/myProject/lib/boost_1_65_0")
#SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "lib/boost_1_65_0/stage/lib")
include_directories(lib/boost_1_65_0/boost)

FIND_PACKAGE(Boost 1.65.0 COMPONENTS program_options )  
MESSAGE(${Boost_INCLUDE_DIR})

INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})

add_executable (myProject main.cpp)


TARGET_LINK_LIBRARIES( myProject LINK_PUBLIC ${Boost_LIBRARIES} -static-libgcc -static-libstdc++ pthread  )

FIND_PACKAGE 返回:
-- 找不到 Boost
但是 MESSAGE(${Boost_INCLUDE_DIR}) 返回一个目录..

尽管如此,构建还是失败了。 如您所见,我已尝试遵循此相关问题的答案: undefined reference to `boost::program_options::options_description::m_default_line_length' 但没有解决问题。

我在 Ubuntu 16.04 上使用 cmake 3.11 和 boost 位于 lib/boost_1_65_0

编辑: 添加行 按照 Tsyvarev 的建议,在 find_package() 之前 set(Boost_DEBUG ON) 返回以下输出:

-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1121 ] _boost_TEST_VERSIONS = 1.67.0;1.67;1.66.0;1.66;1.65.1;1.65.0;1.65
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1123 ] Boost_USE_MULTITHREADED = TRUE
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1125 ] Boost_USE_STATIC_LIBS = 
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1127 ] Boost_USE_STATIC_RUNTIME = 
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1129 ] Boost_ADDITIONAL_VERSIONS = 
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1131 ] Boost_NO_SYSTEM_PATHS = 
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1199 ] Declared as CMake or Environmental Variables:
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1201 ]   BOOST_ROOT = 
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1203 ]   BOOST_INCLUDEDIR = 
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1205 ]   BOOST_LIBRARYDIR = 
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1207 ] _boost_TEST_VERSIONS = 1.67.0;1.67;1.66.0;1.66;1.65.1;1.65.0;1.65
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1306 ] location of version.hpp: /home/me/Documents/test/myProject/lib/boost_1_65_0/boost/version.hpp
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1330 ] version.hpp reveals boost 1.65.0
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1416 ] guessed _boost_COMPILER = -gcc54
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1426 ] _boost_MULTITHREADED = -mt
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1502 ] _boost_RELEASE_ABI_TAG = -
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1504 ] _boost_DEBUG_ABI_TAG = -d
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1567 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = /home/me/Documents/test/myProject/lib/boost_1_65_0/lib;/home/me/Documents/test/myProject/lib/boost_1_65_0/../lib;/home/me/Documents/test/myProject/lib/boost_1_65_0/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib_boost_LIBRARY_SEARCH_DIRS_DEBUG   = /home/me/Documents/test/myProject/lib/boost_1_65_0/lib;/home/me/Documents/test/myProject/lib/boost_1_65_0/../lib;/home/me/Documents/test/myProject/lib/boost_1_65_0/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1756 ] Searching for PROGRAM_OPTIONS_LIBRARY_RELEASE: boost_program_options-gcc54-mt-1_65;boost_program_options-gcc54-mt;boost_program_options-mt-1_65;boost_program_options-mt;boost_program_options
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1809 ] Searching for PROGRAM_OPTIONS_LIBRARY_DEBUG: boost_program_options-gcc54-mt-d-1_65;boost_program_options-gcc54-mt-d;boost_program_options-mt-d-1_65;boost_program_options-mt-d;boost_program_options-mt;boost_program_options
-- [ /usr/local/share/cmake-3.11/Modules/FindBoost.cmake:1883 ] Boost_FOUND = 1
-- Could NOT find Boost
Boost version: 1.65.0
Boost include path: /home/me/Documents/test/myProject/lib/boost_1_65_0
Could not find the following Boost libraries:
        boost_program_options
No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.
/home/me/Documents/test/myProject/lib/boost_1_65_0

【问题讨论】:

  • 除了文字Could NOT find Boost,应该还有其他人描述这个问题。此外,如果在查找 Boost 时遇到问题,第一步可能是启用 Boost_DEBUG:在 find_package() 调用之前添加行 set(Boost_DEBUG ON) 并显示结果日志。
  • 顺便说一句,您可以使用目标属性设置 C++ 标准,而不是设置 -std=c++0xcmake.org/cmake/help/v3.1/prop_tgt/CXX_STANDARD.html

标签: c++ boost cmake


【解决方案1】:

您不仅需要安装标头,还需要安装库。

sudo apt install libboost-program-options-dev 

应该可以解决您的问题。

【讨论】:

    【解决方案2】:

    CMake/FindBoost 似乎找不到 Boost.ProgramOptions 的库文件。验证您在输出中显示的名称是否确实存在于系统的某个位置,如果存在,请确保 FindBoost 正在查找那里。

    【讨论】:

      【解决方案3】:

      它现在正在工作,我认为构建 boost 解决了这个问题:

      ./bootstrap.sh --prefix=path where to install
      ./b2 install
      

      【讨论】:

        猜你喜欢
        • 2012-10-28
        • 2015-11-10
        • 1970-01-01
        • 2018-08-20
        • 2011-04-18
        • 1970-01-01
        • 2011-12-26
        • 2022-01-02
        相关资源
        最近更新 更多