我有一个使用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'
这应该很容易解决,但这是一个奇怪的信息。所以我验证了增强库真的是x64
和dumpbin
。特别是,我检查了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
。
答案 0 :(得分:0)
从消息中,你肯定试图将32位的东西链接到64位的东西。毫无疑问。
所以,某些事情似乎并非如此。
尝试获取正在运行的命令行并在命令提示符中自行运行它。检查所有路径和环境变量。