讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

AniShort
AniShort

AI短剧协同制作平台

Seko
Seko

AI短剧一键生成成片

立刻MV
立刻MV

低成本歌曲 MV、视频生成

C++ linker error怎么修 C++常见链接错误LNK2019解决办法【报错】

梦枫同学_5942

梦枫同学_5942

发布时间:2026-01-26 11:26:52

|

847人浏览过

|

来源于php中文网

原创

LNK2019 是链接错误,表示编译通过但链接时找不到函数或变量的定义;主因是声明与定义不匹配、实现缺失、条件编译屏蔽、模板定义位置不当、C/C++ 名字修饰不一致等。

c++ linker error怎么修 c++常见链接错误lnk2019解决办法【报错】

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),就能确认它想找的是哪个函数。然后检查:

立即学习“C++免费学习笔记(深入)”;

  • 这个函数是否在某个 .cpp 中有定义?定义的签名(参数类型、const 修饰、重载)是否和声明完全一致?
  • 定义所在的 .cpp 是否已加入当前构建配置(右键文件 → 属性 → 常规 → “从生成中排除” 是否为“否”)?
  • 如果是静态库(.lib)提供的符号,是否在「链接器 → 输入 → 附加依赖项」里加了对应 .lib 名?且该 .lib 路径已在「链接器 → 常规 → 附加库目录」中配置?

类成员函数和 inline 函数的常见坑

类内定义的成员函数默认是 inline,但若把它拆成「头文件中声明 + 源文件中定义」,又没加 inline 关键字,就会触发 LNK2019(因为 inline 函数定义必须在每个使用它的编译单元都可见):

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载
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",那基本就是它了。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1069

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3500

2023.10.25

printf用法大全
printf用法大全

php中文网为大家提供printf用法大全,以及其他printf函数的相关文章、相关下载资源以及各种相关课程,供大家免费下载体验。

948

2023.06.20

fprintf和printf的区别
fprintf和printf的区别

fprintf和printf的区别在于输出的目标不同,printf输出到标准输出流,而fprintf输出到指定的文件流。根据需要选择合适的函数来进行输出操作。更多关于fprintf和printf的相关文章详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1029

2023.11.28

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

2458

2023.09.20

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

636

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

391

2025.11.27

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

3248

2023.10.19

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

20

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn