2017-04-18 153 views
0

当我尝试使用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}) 

optimizeddebug路径是从这里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_文件。

+0

'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

+0

我加了两个,它不会改变错误。我认为当它按预期工作时,''Boost_LIBRARIES''应该包含''libboost_regex-vc140-mt-gd-1_63.lib''文件作为绝对路径,不应该吗? – allo

+0

您还可以看看Visual Studio解决方案想要从项目属性链接什么,至少应该将其作为绝对路径给出。 – oLen

回答

0

看来,主要的问题是,我连接到我的图书馆的另一个图书馆被静态链接到提升。

当我动态链接我的项目与提升,这工作,但链接其他库现在没有找到所需的静态版本,因为主要项目不包括静态版本到其路径(这是正确的行为我的项目),而链接的库似乎不包括静态链接的链接,而只是为了以后以某种方式进行链接而引用它们。

目前,它的工作是确保所有部件都与静态或动态版本链接,而无需混合。

它可能与两个路径中的工作,但我想然后它会弄糊涂哪个库用于哪个功能。