当我尝试使用cmake链接boost以生成visual studio 2015文件时,cmake会生成如下的库路径:
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;[...]
但是visual studio尝试将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(...)
命令,而visual studio输出
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}
中的绝对路径。
奇怪的是,在set(Boost_USE_STATIC_LIBS ON)
之前何时使用find_package
,问题恰恰相反,cmake找到libboost_
个文件,而VS期望boost_
文件。
答案 0 :(得分:0)
看来,主要的问题是,我链接到我的图书馆的另一个图书馆是静态链接的。
当我使用boost动态链接我的项目时,这很有效,但链接其他库现在找不到所需的静态版本,因为主项目没有将静态版本包含到其路径中(这是我的正确行为)虽然链接库似乎不包含从boost静态链接的符号,但只是引用它们以便稍后以某种方式链接。
目前,它确保所有部件都在不混合的情况下连接静态或动态版本。
它可能适用于在路径中同时使用两者,但我想这会使哪个库用于哪个函数会让人感到困惑。