将静态库链接到MSVC中的共享库会导致无法解析的符号

时间:2018-10-23 23:44:04

标签: c++ visual-c++ cmake dynamic-linking

我正在建立一个动态c,该库链接到静态库b

静态库b静态链接到静态库a

c的cmake大致如下所示(ab的cmake非常相似):

cmake_minimum_required(VERSION 2.6)
project(c)

include_directories(../b/src)
link_directories(../b/Debug)

add_library(c SHARED src/c.cpp)
target_link_libraries(c PRIVATE b)

我面临的问题与c无法看到对a中定义的函数的引用有关。

b.lib(b.obj) : error LNK2019: unresolved external symbol "int __cdecl a(void)" (?a@@YAHXZ) referenced in function "int __cdecl b(void)" (?b@@YAHXZ) [C:\Users\user\Workspace\garbage\c\c.vcxproj]
C:\Users\user\Workspace\garbage\c\Debug\c.dll : fatal error LNK1120: 1 unresolved externals [C:\Users\user\Workspace\garbage\c\c.vcxproj]

c是否可以正常链接?

相关问题:

Linking static libraries to other static libraries

1 个答案:

答案 0 :(得分:0)

某事告诉我,您的链接器输出不太正确。似乎ab试图导出类。

此外,此行告诉我们b实际上看不到库(类)a的某些符号(也许是类的默认构造函数):

b.lib(b.obj) : error LNK2019: unresolved external symbol "int __cdecl a(void)" (?a@@YAHXZ) referenced in function "int __cdecl b(void)" (?b@@YAHXZ)

实际上,您的CMake示例从不将a链接到b,并且,您最初的问题是b被链接到a中。如果您的意思是您在问题中所说的,则链接程序将显示逻辑错误。