无法使用CMake的Visual Studio生成器链接到子库/内部库/嵌入式库

时间:2015-06-07 05:06:25

标签: c++ visual-studio visual-c++ cmake

full error is available at AppVeyor

我使用CMake的add_library命令创建了一个库,但是当我尝试将另一个目标编译到这个库时,我得到了像LINK : fatal error LNK1104: cannot open file '..\Debug\boost_http.lib' [C:\projects\boost-http\build\test\algorithm.vcxproj]这样的愚蠢错误。

其他CMake生成器也可以。

如何正确处理此问题?

1 个答案:

答案 0 :(得分:1)

从另一个问题来看,我收集的项目是this one

问题的原因是您将boost_http构建为共享库,但不从中导出任何函数或类。您需要使用__declspec(dllexport)修饰公共API函数/类,以使这些函数/类可用于使用目标。有关详细信息,请参阅Microsoft docs

如果你这样做,你会发现除了boost_http.dll之外还会有一个名为boost_http.lib的小文件,这是消费目标实际链接到的文件。这是您的测试被告知链接到的,但它不存在。

CMake GenerateExportHeader可以在这方面提供帮助。有关如何在the wiki中使用它的说明。

但是,更简单的解决方法是将boost_http目标设为静态。通过更改为add_library("boost_http" STATIC ${library_SRC}),项目应该按原样运行。