首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake找到了boost库,但Make无法链接它们

CMake找到了boost库,但Make无法链接它们
EN

Stack Overflow用户
提问于 2016-09-09 14:52:17
回答 1查看 1.2K关注 0票数 3

在一个月后返回到项目后,我能够成功地运行CMake,输出如下

代码语言:javascript
复制
-- Boost version: 1.61.0
-- Found the following Boost libraries:
--   system
--   thread
--   filesystem
--   chrono
--   date_time
--   atomic
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/LittleNewt/gitness/MangaMeCLI/build

但是,由于某些原因,在生成的MakeFile上运行Make时,我会得到以下输出

代码语言:javascript
复制
[ 50%] Building CXX object CMakeFiles/mangaMeCLI.dir/src/mangaMeCLI.cpp.o
[100%] Linking CXX executable mangaMeCLI
Undefined symbols for architecture x86_64:
  "boost::filesystem::path::operator/=(char const*)", referenced from:
      _main in mangaMeCLI.cpp.o
  "boost::filesystem::path::operator/=(boost::filesystem::path const&)", referenced from:
      boost::filesystem::path::operator/=(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&) in mangaMeCLI.cpp.o
      boost::filesystem::path::operator/=(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in mangaMeCLI.cpp.o
  "boost::filesystem::detail::current_path(boost::system::error_code*)", referenced from:
      boost::filesystem::current_path() in mangaMeCLI.cpp.o
  "boost::filesystem::detail::create_directory(boost::filesystem::path const&, boost::system::error_code*)", referenced from:
      boost::filesystem::create_directory(boost::filesystem::path const&) in mangaMeCLI.cpp.o
  "boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)", referenced from:
      boost::filesystem::exists(boost::filesystem::path const&) in mangaMeCLI.cpp.o
      boost::filesystem::is_directory(boost::filesystem::path const&) in mangaMeCLI.cpp.o
  "boost::system::system_category()", referenced from:
      ___cxx_global_var_init.75 in mangaMeCLI.cpp.o
  "boost::system::generic_category()", referenced from:
      ___cxx_global_var_init.73 in mangaMeCLI.cpp.o
      ___cxx_global_var_init.74 in mangaMeCLI.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [mangaMeCLI] Error 1
make[1]: *** [CMakeFiles/mangaMeCLI.dir/all] Error 2
make: *** [all] Error 2

我做了一些研究,发现其他人也有同样的问题,因为没有为他们的体系结构(64位与32位)链接正确的库版本,但不确定如何确定这是否是我的问题。

以下是我未更改的CMakeLists.txt文件

代码语言:javascript
复制
CMAKE_MINIMUM_REQUIRED(VERSION 3.4.1)
PROJECT(MangaMeCLI)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
INCLUDE_DIRECTORIES(includes)
ADD_EXECUTABLE(mangaMeCLI src/mangaMeCLI.cpp)
MESSAGE("${CMAKE_CXX_FLAGS}")

SET(Boost_USE_MULTITHREADED ON)
FIND_PACKAGE(Boost REQUIRED COMPONENTS system thread filesystem)
INCLUDE_DIRECTORIES(${BOOST_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(mangaMeCLI ${BOOST_LIBRARIES})

SET(OPENSSL_ROOT_DIR /usr/local/Cellar/openssl/*)
FIND_PACKAGE(OpenSSL REQUIRED)
INCLUDE_DIRECTORIES(${OPENSSL_INCLUDE_DIR})
TARGET_LINK_LIBRARIES(mangaMeCLI ${OPENSSL_LIBRARIES})

FIND_PACKAGE(cppnetlib REQUIRED)
INCLUDE_DIRECTORIES(${CPPNETLIB_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(mangaMeCLI ${CPPNETLIB_LIBRARIES})

在阅读了一篇有用的评论后,我发现BOOST_LIBRARIES变量是空的,即使cmake打印出它找到了我正在寻找的boost库。我假设这就是我犯错的原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-09 15:19:11

CMake变量区分大小写。根据find module's documentation,您需要Boost_LIBRARIES,而不是BOOST_LIBRARIES

代码语言:javascript
复制
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(mangaMeCLI ${Boost_LIBRARIES})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39405482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档