Visual Studio 2015中使用TinyEmbeddedTest与VisualGDB搭建单元测试项目时遭遇Undefined Reference链接错误及配置异常求助
解决VisualGDB + TinyEmbeddedTest单元测试项目的链接错误问题
看起来你在嵌入式单元测试的配置上踩了几个典型的坑,我来帮你一步步梳理解决思路:
问题根源分析
你遇到的undefined reference to 'Fault_Clear'和Fault_Set本质是单元测试项目没有链接到fault.c的编译产物:虽然fault.h能被找到(所以没编译错误),但测试项目的链接阶段找不到这两个函数的实现代码。主项目正常是因为它本身包含了fault.c并编译链接了,而测试项目没把这个文件纳入构建流程。
你后来尝试添加目录到链接器附加输入的操作是错误的——链接器的附加输入需要指定具体的目标文件(.o),而不是目录,这才导致了路径解析错乱和权限报错。
具体解决方案
1. 将fault.c添加到单元测试项目
因为你用TinyEmbeddedTest的方式是在ADCTests.cpp中包含ADC.c,但ADC.c依赖的fault.c并没有被测试项目编译。最简单的办法:
- 在解决方案资源管理器中,右键单元测试项目 → 添加 → 现有项
- 找到主项目中的
fault.c文件,添加到测试项目里 - 重新构建测试项目,链接器就能找到函数实现了
2. 配置项目依赖与链接主项目产物
如果不想重复添加源文件,可以让测试项目直接链接主项目的编译输出:
- 右键单元测试项目 → 项目依赖项,勾选你的主项目,确保主项目先完成编译
- 右键单元测试项目 → 属性 → VisualGDB → 链接器
- 在附加库/对象中添加主项目生成的目标文件路径,比如:
(注意是具体的C:\Development\myProject\VisualGDB\Debug\Src\fault.o C:\Development\myProject\VisualGDB\Debug\Src\ADC.o.o文件,不是目录)
3. 修复链接器路径解析问题
你之前遇到的路径被解析成C:\SysGCC\arm-eabi\Development\myProject\...是因为工具链把你输入的绝对路径当成了相对路径处理。解决办法:
- 输入路径时确保是完整的绝对路径,或者使用VisualGDB提供的宏,比如
$(TargetDir)来引用主项目的输出目录,避免手动输入错误 - 检查文件权限:确保
SysGCC工具链所在的用户有访问主项目Debug目录的权限(右键目录 → 属性 → 安全 → 确认用户有读取权限)
4. 同步编译选项
确保单元测试项目的编译选项和主项目一致:
- 右键单元测试项目 → 属性 → VisualGDB → C/C++编译器
- 检查预处理器定义、包含目录是否和主项目完全相同,比如主项目中可能定义了
HAL_STM32F4xx这类宏,测试项目如果没同步,可能导致函数声明不匹配
最后验证
完成上述配置后,先清理整个解决方案(菜单 → 生成 → 清理解决方案),然后重新构建主项目和单元测试项目,链接错误应该就能解决了。
内容的提问来源于stack exchange,提问作者Smoggie Tom
相关产品推荐
相关产品推荐

