当我尝试使用cmake生成的Visual Studio 2015年文件与升压链接,cmake的生成库路径是这样的:与CMake和Visual Studio的链接助推2015年
optimized;D:/work/libs/boost_1_63_0/lib64-msvc-14.0/boost_regex-vc140-mt-1_63.lib;debug;D:/work/libs/boost_1_63_0/lib64-msvc-14.0/boost_regex-vc140-mt-gd-1_63.lib;[...]
但视觉工作室试图链接libboost_regex-vc140-mt-gd-1_63.lib
从使用此路径的cmake文件生成解决方案文件。
的cmake的文件的相关部分:上述
target_compile_definitions(${PROJECT_NAME} [...] BOOST_ALL_DYN_LINK)
message("${Boost_LIBRARIES}")
target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES})
的optimized
和debug
路径是从这里message(...)
命令和视觉工作室输出是
2>LINK : fatal error LNK1104: cannot open file 'libboost_regex-vc140-mt-gd-1_63.lib'
哪个是正确的,因为它应使用boost_regex-vc140-mt-gd-1_63.lib
,这是${Boost_LIBRARIES}
中的绝对路径。
奇怪认为,当是find_package
之前使用set(Boost_USE_STATIC_LIBS ON)
,问题是完全倒过来,cmake的发现libboost_
文件,而VS预计boost_
文件。
'libboost_regex-vc140-mt-gd-1_63.lib'对应于boost :: regex的静态版本,我猜想CMake想链接静态库。你可以尝试在你的CMakeLists中添加'target_link_libraries($ {PROJECT_NAME} Boost :: dynamic_linking)',或者在你的'find_package(Boost)''之前设置(Boost_USE_STATIC_LIBS OFF)''? – oLen
我加了两个,它不会改变错误。我认为当它按预期工作时,''Boost_LIBRARIES''应该包含''libboost_regex-vc140-mt-gd-1_63.lib''文件作为绝对路径,不应该吗? – allo
您还可以看看Visual Studio解决方案想要从项目属性链接什么,至少应该将其作为绝对路径给出。 – oLen