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

Visual Studio用GTest测试C代码加extern C时报LNK2019未解析外部符号

问题原因
  • 测试项目仅引入source.h头文件时,编译器只能获取到fun函数的声明,链接阶段需要找到对应函数的实现才能完成编译。
  • 你的C项目默认配置为生成可执行文件(.exe),内部的函数符号不会对外暴露,测试项目无法直接链接到C项目中fun的实现,因此抛出LNK2019未解析外部符号错误。
  • 直接#include "../runtest/source.c"能运行的本质是把source.c的源码直接嵌入test.cpp共同编译,测试代码直接拿到了函数实现,不需要额外链接,但这种方式属于不规范写法,会存在代码重复编译、修改后编译增量失效等问题,不推荐长期使用。
解决方案

方案1:将C项目调整为静态库项目(最推荐,适合长期维护的项目)

  1. 右键C项目 -> 选择「属性」 -> 「常规」 tab -> 将「配置类型」从「应用程序(.exe)」修改为「静态库(.lib)」,保存配置。
  2. 右键测试项目 -> 选择「添加」 -> 「引用」,勾选你的C项目,点击确定。该操作会自动配置编译顺序、以及链接时的静态库依赖,无需手动添加库路径。
  3. 保留现有test.cpp中extern "C"包裹头文件的写法,重新编译即可正常运行测试。

方案2:将C源文件加入测试项目编译(适合临时测试场景)

如果不想修改原C项目的生成配置,可以右键测试项目 -> 选择「添加」 -> 「现有项」,将source.c添加到测试项目的编译列表中,无需修改include写法,重新编译即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:00:03