与boost 1.60链接时出现问题

时间:2016-03-23 20:17:30

标签: c++ boost linker cmake

我有一个使用boost 1.60的项目。目前,此项目的构建失败,并显示以下消息:

libboost_thread-vc140-mt-1_60.lib(thread.obj) : fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'

这应该很容易解决,但这是一个奇怪的信息。所以我验证了增强库真的是x64dumpbin。特别是,我检查了libboost_thread-vc140-mt-1_60.lib并获得了结果8664 machine (x64)

我的下一个假设是CMake做错了什么。倾倒一些变量产生了以下结果:

-- BOOST_ROOT: D:\path\to\project\..\ext/boost
-- BOOST_LIBRARYDIR: D:\path\to\project\..\ext/boost/lib64
-- BOOST_INCLUDEDIR: D:\path\to\project\..\ext/boost/include
-- Boost version: 1.60.0

这些都是有效路径。此外,CMakeLists.txt的这一部分似乎是有效的:

if(WIN32)
    # set boost needed boost library parameters
    set(Boost_USE_MULTITHREADED ON)
    set(Boost_USE_STATIC_LIBS ON)
    set(BOOST_ROOT ${LIB_BOOST_ROOT_DIR})
    set(BOOST_LIBRARYDIR ${LIB_BOOST_ROOT_DIR}/lib${LIB_SUFFIX})
    set(BOOST_INCLUDEDIR ${LIB_BOOST_ROOT_DIR}/include)
    message("-- Boost_USE_MULTITHREADED: ${Boost_USE_MULTITHREADED}")
    message("-- Boost_USE_STATIC_LIBS: ${Boost_USE_STATIC_LIBS}")
    message("-- BOOST_ROOT: ${BOOST_ROOT}")
    message("-- BOOST_LIBRARYDIR: ${BOOST_LIBRARYDIR}")
    message("-- BOOST_INCLUDEDIR: ${BOOST_INCLUDEDIR}")
    find_package(BOOST 1.60 REQUIRED COMPONENTS thread system chrono regex filesystem iostreams log)
endif(WIN32)

那么,我在这里缺少什么?

修改

项目的构建是使用ninja完成的。当我查看CMakeCache.txt时,我看到了这一点:

//Flags used by the linker.
CMAKE_EXE_LINKER_FLAGS:STRING= /machine:x64

编辑2

我查看了构建脚本。在致电CMake之前,我使用参数vcvarsall.bat启动amd64

1 个答案:

答案 0 :(得分:0)

从消息中,你肯定试图将32位的东西链接到64位的东西。毫无疑问。

所以,某些事情似乎并非如此。

尝试获取正在运行的命令行并在命令提示符中自行运行它。检查所有路径和环境变量。