Visual studio Boost VS2017链接到错误的DLL
我有一个CMake文件,可以执行以下操作:Visual studio Boost VS2017链接到错误的DLL,visual-studio,boost,cmake,Visual Studio,Boost,Cmake,我有一个CMake文件,可以执行以下操作: find_package(Boost COMPONENTS system filesystem) add_library(MyModule MODULE main.cpp) target_include_directories(MyModule PUBLIC ${Boost_INCLUDE_DIRS}) target_link_libraries(MyModule Boost::system Boost::filesystem) 我使用VS2017
find_package(Boost COMPONENTS system filesystem)
add_library(MyModule MODULE main.cpp)
target_include_directories(MyModule PUBLIC ${Boost_INCLUDE_DIRS})
target_link_libraries(MyModule Boost::system Boost::filesystem)
我使用VS2017作为我的发电机。当我用cmake
生成项目文件时,它会找到boost_system-vc141-mt-1_63.lib
,我可以看到它在vcxproj的链接规则中。但是,当我尝试编译时,我得到以下错误:
链接:致命错误LNK1104:无法打开文件'libboost_system-vc140-mt-1_63.lib
注意不同的发电机(vc140与vc141)。我知道我的编译器输出了正确的值,因为我从源代码构建了boost,所以我尝试将vc141重命名为vc140,但错误保持不变。我还确认项目文件中未提及vc140
发生什么事了?如何强制boost链接到正确的版本?使用Visual Studio构建时,boost有一些
pragma
语句可以为您进行链接。这称为“自动链接”,它覆盖了您可能传递给链接器的任何命令行参数
解决方案是定义BOOST\u ALL\u NO\u LIB
。这可以通过两种方式实现:
#定义boost_ALL_NO_LIB
李>
添加定义(“-DBOOST\u ALL\u NO\u LIB”)
添加到您的cmake文件中禁用_自动链接
导入的目标:
target\u link\u库(MyModule Boost::system Boost::filesystem Boost::disable\u autolinking)
在下面添加了我的解决方案。发布了这个,这样我以后遇到同样的问题时可以找到它。当我找到解决方案时,是因为一位同事提到了“自动链接”。否则我就不会找到解决方案。只是一个提示:我认为第二个解决方案行不通。它只定义一个名为
BOOST\u ALL\u NO\u LIB
的CMake缓存变量。如果我看一下,它会说一个解决方案是添加Boost::disable_autolinking
依赖项,比如target_link_库(MyModule Boost::system Boost::filesystem Boost::disable_autolinking)
@Florian,答案中的两个解决方案都为我解决了这个问题,但你的建议也是如此。向上投票。:)我写这篇文章已经有几个月了。从那以后,我了解了Florian的Boost::disable_autolinking
,它是在cmake 3.5中引入的,可以确认这是真正的方式。