【问题标题】:C++ Cmake boost lib keep throwing a lot of errorsC++ Cmake boost lib不断抛出很多错误
【发布时间】:2018-08-26 16:12:15
【问题描述】:

我正在尝试使用 cmake 做一个 boost 应用程序。 我不知道为什么,但它不断抛出很多错误。我正在使用 cmake 3.10,提升 1.68。

错误日志太长,所以我把它贴在这里:

https://pastebin.com/E91KHfpD

我的 cmake 配置:

    cmake_minimum_required(VERSION 3.10)
project(testProject)

set(CMAKE_CXX_STANDARD 11)

add_executable(testProject main.cpp)
set_target_properties(testProject PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
target_link_libraries(testProject F:/c++libs/boost_1_68_0/stage/lib/libboost_filesystem-mgw51-mt-s-x32-1_68.a)
target_include_directories(testProject PRIVATE F:/c++libs/boost_1_68_0)

第二个想法是我正在尝试使用 findboost。 我的第二个 cmake 配置:

cmake_minimum_required(VERSION 3.12.1)
project(testProject)

set(CMAKE_CXX_STANDARD 11)

set(BOOST_ROOT "F:/c++libs/boost_1_68_0")
set(BOOST_LIBRARYDIR ${BOOST_ROOT}/stage/lib/)
set(BOOST_INCLUDEDIR "F:/c++libs/boost_1_68_0/boost")
set(Boost_USE_STATIC_LIBS ON)
set(Boost_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME ON)
add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)

find_package(Boost 1.68 COMPONENTS system filesystem REQUIRED)

add_executable(testProject main.cpp)
target_link_libraries(testProject ${Boost_LIBRARIES})
target_include_directories(testProject PRIVATE ${Boost_INCLUDE_DIRS})
set_target_properties(testProject PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")

这会抛出这个错误:

F:/c++libs/boost_1_68_0/stage/lib/libboost_filesystem-mgw51-mt-sd-1_68.a(codecvt_error_category.o): duplicate section `.rdata$_ZTIN5boost6system14error_category12std_categoryE[__ZTIN5boost6system14error_category12std_categoryE]' has different size
F:/c++libs/boost_1_68_0/stage/lib/libboost_filesystem-mgw51-mt-sd-1_68.a(codecvt_error_category.o): duplicate section `.rdata$_ZTVN5boost6system14error_category12std_categoryE[__ZTVN5boost6system14error_category12std_categoryE]' has different size

【问题讨论】:

  • 检查您是否使用相同的 -std=c++14 或 -std=c++11 等标志来构建提升和测试项目。类似问题的示例:stackoverflow.com/questions/11635485/…
  • 嗨!并感谢您的回答。我只想问你一件事,我没有具体说明这个论点。那么默认是什么?
  • 不知道你的例子到底出了什么问题,但你可以试试here(不是我的博客)提出的方法。首先,您绝对应该使用find_package,并且您不应该手动添加 boost 包含目录。
  • 那里有几个问题,其中之一是您没有指定所有必需的库。如果您使用的是 boost_filesystem,则还需要 boost_system 和其他一些可能。

标签: c++ boost cmake


【解决方案1】:

您不能使用-DBOOST_ERROR_CODE_HEADER_ONLY 并链接到boost_system,您需要删除定义或库。

【讨论】:

  • 第二次尝试出现与上述相同的错误,但它开始在系统上说它不仅在文件系统上。我做了什么改变,我只删除了 dboost_error_code_header_only 行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 2015-04-07
  • 2022-09-29
  • 2018-10-14
  • 2021-06-13
相关资源
最近更新 更多