You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何GCC编译器无法识别并诊断析构函数缺失定义问题?

踩坑记录:未实现析构函数导致的链接器错误

最近耗了大把时间排查一个事后看极其简单的链接器错误,最终发现问题出在基类的析构函数上:
头文件里我只写了声明:

~SomeClass();

却没有提供具体实现,正确的写法应该是直接在头文件里定义空实现:

~SomeClass(){};

有点费解的是,GCC明明能揪出不少复杂的编译问题,这种情况却没在编译阶段提示,直到链接环节才报错。补充下环境:用CMake构建,编译器是GCC。

为什么是链接器错误而非编译错误?

编译器在处理代码时,只要看到析构函数的声明,就会认为后续会有对应的实现存在,不会在编译阶段报错。只有当链接器尝试把所有目标文件整合到一起,寻找这个析构函数的具体代码时,发现找不到对应的实现,才会抛出未定义符号的链接错误。

内容的提问来源于stack exchange,提问作者LNorth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 09:14:52