Visual Studio尝试链接未使用的静态库

时间:2019-05-15 14:16:08

标签: visual-c++ cmake linker-errors

我正在构建链接到静态库(foo)的可执行文件(bar)。静态库(bar)依赖于另一个静态库(baz),但仅使用其中的头文件。

当我尝试构建项目时,这两个库似乎可以很好地构建,但是baz实际上没有产生任何输出。但是,可执行目标无法构建,声称找不到baz.lib

当没有目标使用库中的符号时,为什么要尝试链接库?

我删除了__declspec(dllexport)中的一些baz声明,以确保它是作为静态库构建的。

CMake文件分为几个目录,比这更复杂,但这是一般要点:

add_library(baz)
target_include_directories(baz PUBLIC ...)
target_sources(foo PRIVATE ...)

add_library(bar)
target_link_libraries(bar PRIVATE baz ...)
target_include_directories(bar PUBLIC ...)
target_sources(bar PRIVATE ...)

add_executable(foo main.cpp)
target_link_libraries(foo bar)

顺便说一下,使用CMake 3.14.3。

Visual Studio 2019输出以下错误:

LNK1104: cannot open file '..\baz\Debug\baz.lib'

编辑:我刚刚在项目中启用了C(语言),现在正在构建库,但是遇到三个unresolved external symbol错误。

编辑:好吧,看起来像是在C头周围策略性地添加了两个extern "C" { }声明,这使我摆脱了所有构建问题。现在调试段错误...

0 个答案:

没有答案