【发布时间】:2018-08-26 16:12:15
【问题描述】:
我正在尝试使用 cmake 做一个 boost 应用程序。 我不知道为什么,但它不断抛出很多错误。我正在使用 cmake 3.10,提升 1.68。
错误日志太长,所以我把它贴在这里:
我的 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 和其他一些可能。