c++ - 在 MSVC 中将静态库链接到共享库会导致未解析的符号
问题描述
我正在构建一个链接到静态库的动态库。c
b
静态库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
可以正确链接吗?
相关问题:
解决方案
有些东西告诉我你的链接器输出不太正确。看起来可能a
并b
正在尝试导出类。
除此之外,这一行告诉我们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 示例从不链接a
到b
and,您的原始问题说b
链接到a
. 如果您的意思是您在问题中所说的话,则链接器会显示逻辑错误。
推荐阅读
- azure - 如何将对象从 azure 数据工厂查找传递到笔记本,以便我可以在 python 脚本中使用对象/json
- mysql - 如何在 RStudio 1.2 中通过 SSH 连接到远程 MySQL 服务器
- dynamics-crm - 忽略动态 CRM FetchXML 中的大小写
- c - 进程卡在等待中
- python - 使用 boto 将多个文件并行上传到 s3
- python-3.x - 将用户移动到消息作者的语音频道
- python - tkinter 上的 Python 可折叠侧边栏
- meson-build - 如何在介子构建中配置 ARC 编译器
- html - 将值添加到由 ngfor 在 html 中在 TypeScript 中声明的变量
- angular - Angular:如何避免不同组件样式的重复但保持模板干净