现象
测试文件A.c中内容,依赖于B.c,这里mock了B.h
#include "unity.h"
//#include "support_A.h"
#include "mock_B.h"
#include "A.h"
如上代码段,support_A.h是存在于support文件夹中新建的支持文件,其中没有任何内容,当不加入support_A.h报错
Linking test_A.out...
B.h:3683:undefined reference to `__LDREXW'
B.h:3683:undefined reference to `__STREXW'
所指向的内容是B.c文件中的静态内联函数,其中__LDREXW
和__STREXW
是根据不同编译器来进行定义的;
当我加入这个空的头文件后
#include "unity.h"
#include "support_A.h"
#include "mock_B.h"
#include "A.h"
报错消失
初步分析
应该是链接时候出现了问题,查看报错可看到链接的并不是mock_B.h而是B.h,查看了project.yml中的引用路径等都是没有问题的,可能是头文件的引用顺序导致了链接文件的不同,当加入support中的头文件时改变了其链接关系,使得A.c中的文件链接到mock_B.h,从而报错消失
初步解决
目前是加入头文件影响链接关系解决,发现这样是不正确的,会导致无法生成A.o,导致无法测试A.c中的方法
进一步分析
正常情况ceedling只应该编译mock_B.c根本不会编译B.c从而导致B.h中undefined reference错误,所以现在想办法让他不编译B.c,只编译mock_B.c