[编辑:问题是有缺陷的,我描述为“main.c”的文件实际上是“main.cpp”,这就是我遇到问题的原因,从C ++文件调用C函数。问题因此是错误的,没有答案,但如果你有这个未定义的符号问题,也要考虑检查你是不是在混合C& C ++。]
我正在使用uVision 5开发固件,但我无法让链接器找到我的一个功能。
main.c:
#include "Test.h"
int main()
{
return three();
}
Test.h:
#ifndef TEST_H
#define TEST_H
int three();
#endif
TEST.C
#include "Test.h"
int three()
{
return 3;
}
所有这些文件都是我项目的根目录,我知道它们被编译好像我在其中引入了语法错误,编译器报告错误。 另外看一下生成的地图文件,我看到三个()被删除了:
Removing test.o(i.three), (4 bytes).
出于测试目的,我有--no_remove到链接器命令行,map文件现在包含:
0x0002ba76 0x00000004 Code RO 1 i.three test.o
很明显,链接器很清楚我的功能,并且会根据标记删除它。
无论如何,它报告:
.\build\uvision5\test.axf: Error: L6218E: Undefined symbol three() (referred from main.o).
Not enough information to list image symbols.
答案 0 :(得分:1)
有缺陷的问题,实际上是混合使用C / C ++的情况,在这种情况下,如果从C ++调用C函数而不将其声明为extern C,则会丢失一个符号。