首页 > 解决方案 > 在 MSVC 中将静态库链接到共享库会导致未解析的符号

问题描述

我正在构建一个链接到静态库的动态库。cb

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

的 cmakec大致如下所示(a和的 cmakeb非常相似):

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可以正确链接吗?

相关问题:

将静态库链接到其他静态库

标签: c++visual-c++cmakedynamic-linking

解决方案


有些东西告诉我你的链接器输出不太正确。看起来可能ab正在尝试导出类。

除此之外,这一行告诉我们b实际上看不到 library (class) 的某些符号(可能是类默认构造函数)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 示例从不链接aband,您的原始问题说b链接到a. 如果您的意思是您在问题中所说的话,则链接器会显示逻辑错误。


推荐阅读