C++ linker error怎么修 C++常见链接错误LNK2019解决办法【报错】
技术百科
冰火之心
发布时间:2026-01-26
浏览: 次 LNK2019 是链接错误,表示编译通过但链接时找不到函数或变量的定义;主因是声明与定义不匹配、实现缺失、条件编译屏蔽、模板定义位置不当、C/C++ 名字修饰不一致等。
LNK2019 是什么,为什么它不报编译错而只报链接错
LNK2019 表示「找不到符号定义」——编译器已经顺利生成了 .obj 文件,但链

extern 或头文件里有声明)却没找到对应实现。典型现象是:代码能编译通过,运行前一步直接失败,错误信息末尾带 unresolved external symbol。
常见诱因不是语法错,而是工程结构或声明/定义不匹配:
- 函数在头文件中声明了,但源文件里漏写了实现,或实现写在了条件编译块里(比如
#ifdef DEBUG但当前是 Release 构建) - 类成员函数声明在
.h中,但定义写在了另一个未加入项目的.cpp文件里 - 模板函数只有声明没有定义(或定义放在了 .cpp 里),导致实例化时链接器看不到具体代码
- 调用的是 C 函数,但 C++ 源文件里没加
extern "C"声明,造成名字修饰(name mangling)不一致
怎么快速定位 LNK2019 报错里的具体符号
错误行末尾的 symbol 名字往往被修饰过(比如 ?myFunc@@YAXXZ),直接搜不到。先用 dumpbin /symbols 或 Visual Studio 的「属性 → 配置属性 → 链接器 → 调试 → 生成映射文件」打开 /MAP,再配合 undname 工具还原:
undname ?myFunc@@YAXXZ
输出类似 void __cdecl myFunc(void),就能确认它想找的是哪个函数。然后检查:
- 这个函数是否在某个
.cpp中有定义?定义的签名(参数类型、const 修饰、重载)是否和声明完全一致? - 定义所在的
.cpp是否已加入当前构建配置(右键文件 → 属性 → 常规 → “从生成中排除” 是否为“否”)? - 如果是静态库(
.lib)提供的符号,是否在「链接器 → 输入 → 附加依赖项」里加了对应.lib名?且该.lib路径已在「链接器 → 常规 → 附加库目录」中配置?
类成员函数和 inline 函数的常见坑
类内定义的成员函数默认是 inline,但若把它拆成「头文件中声明 + 源文件中定义」,又没加 inline 关键字,就会触发 LNK2019(因为 inline 函数定义必须在每个使用它的编译单元都可见):
class A {
public:
void foo(); // 声明
};
如果 foo() 只在 A.cpp 里实现,而别的 .cpp 包含了 A.h 并调用了 foo(),链接器就找不到定义。解决办法二选一:
- 把实现挪回头文件里(
inline void foo() { ... }) - 保持分离,但确保所有调用方都能看到定义——即把
A.cpp的内容移到A.inl,并在A.h末尾#include "A.inl" - 或者明确加
extern声明并确保只有一个定义源(非 inline 场景下,定义只能出现在一个.cpp中)
第三方库或 C 接口混用时的名字修饰问题
当你在 C++ 里调用 C 写的 DLL 或静态库(比如 printf、sqlite3_open),但头文件没做 extern "C" 包裹,链接器会按 C++ 规则修饰名字,而库里导出的是 C 风格无修饰名,必然不匹配:
extern "C" {
#include "sqlite3.h"
}
同理,自己写的供 C 调用的函数,也得用 extern "C" 声明:
extern "C" __declspec(dllexport) int my_c_api_func(int x);
否则即使编译过,链接时也会报 LNK2019。另外注意:DLL 导入库(.lib)和头文件必须配套,版本不一致也可能导致符号名表面相同、实际不同。
这类问题最麻烦的地方在于:错误信息看不出是 C/C++ 混合导致的,得靠经验判断——如果符号名看起来“太干净”(比如 _my_c_api_func),而你的 C++ 代码里调用时没加 extern "C",那基本就是它了。
# 的是
# 就会
# 放在
# 找不到
# 里加
# 错误信息
# 写在
# 工具
# Error
# c++
# void
# 接口
# visual studio
# 为什么
# printf
# lsp
# 成员函数
# 头文件
# map
# extern
# const
# include
# 会报
# 不匹配
# symbol
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 如何使用Golang实现函数指针_函数变量与回调示
- 如何使用正则表达式提取以编号开头、后接多个注解的逻
- Drupal 中渲染节点时出现 HTML 标签嵌套
- Win11怎么设置开机问候语_自定义Win11锁屏
- 如何使用Golang反射创建map对象_动态生成键
- Win11怎么关闭自动调节亮度 Win11禁用内容
- 如何使用Golang指针与接口结合_实现方法调用和
- windows如何测试网速_windows系统网络
- php能跑在stm32上吗_php在stm32微控
- mac怎么看硬盘大小_MAC查看磁盘存储空间与文件
- Windows怎样关闭开始菜单推荐广告_Windo
- Win11如何设置省电模式 Win11开启电池节电
- 如何使用Golang log设置日志输出格式_Go
- Win11怎么关闭系统透明度_Windows11个
- php下载安装后memory_limit怎么设置_
- Win11视频默认播放器怎么改_Win11关联第三
- Win11怎么查看激活状态_查询Windows 1
- Win11开机速度慢怎么优化_Win11系统启动加
- Win11怎样彻底卸载自带应用_Win11彻底卸载
- Win11怎么设置指纹解锁 Win11笔记本录入指
- c++如何获取map中所有的键_C++遍历键值对提
- Win11怎样安装微信开发者工具_Win11安装开
- 如何在Golang中实现并发消息队列消费者_Gol
- php控制舵机角度怎么调_php发送pwm信号控制
- php命令行怎么运行_通过CLI模式执行PHP脚本
- Mac如何解压zip和rar文件?(推荐免费工具)
- 如何在Golang中解压文件_Golang com
- Windows11怎么用“记事本”自动换行与编码
- 如何提升Golang JSON序列化性能_Gola
- Python装饰器设计思路_功能增强机制说明【指导
- Win11怎么设置快速访问_Windows11文件
- 微信企业付款回调PHP怎么接收_处理企业付款异步通
- 如何使用Golang开发基础文件下载功能_Gola
- c++怎么使用std::tuple存储多元组数据_
- Win11怎么设置虚拟内存_Windows 11优
- VSC怎么配置PHP的Xdebug_远程调试设置步
- Win11怎么设置任务栏对齐方式_Windows1
- 为什么Go需要go mod文件_Go go mod
- Windows 10怎么录屏_Windows 10
- Windows10如何更改桌面背景_Win10个性
- Win11怎么打开注册表_Windows 11注册
- 如何在Golang中使用replace替换模块_指
- PHP怎么接收URL中的锚点参数_获取#后面参数值
- Win11时间不对怎么同步_Win11自动校准互联
- ACF 教程:正确更新嵌套在多层 Group 字段
- Mac如何查看电池健康百分比_Mac系统信息电源检
- Win11文件夹预览图不显示怎么办_Win11缩略
- php转mp4怎么设置帧率_调整php生成mp4视
- 如何优化Golang Web性能_Golang H
- 如何在 Go 中正确反序列化多个同级 XML 元素

QQ客服