未定义对函数的引用
我正在使用Linux,并且具有以下文件:
main.c, main.hfileA.c, fileA.h
fileB.cpp, fileB.h
该函数F1()
在中声明fileB.h
和定义fileB.cpp
。我需要在中使用该函数fileA.c
,因此我将该函数声明为
extern void F1();
在fileA.c
。
但是,在编译过程中,我得到了错误
fileA.c: (.text+0x2b7): undefined reference to `F1'
怎么了?
谢谢。
预计到达时间:多亏了我收到的答案,我现在有了以下内容:
在fileA.h中,我有
#include fileB.h#include main.h
#ifdef __cplusplus
extern "C"
#endif
void F1();
在fileA.c中,我有
#include fileA.h
在fileB.h中,我有
extern "C" void F1();
在fileB.cpp中,我有
#include "fileB.h"extern "C" void F1()
{ }
但是,我现在有错误
fileB.h: error: expected identifier or '(' before string constant
回答:
如果您确实fileA.c
是使用C而不是C ++进行编译,则需要确保该函数具有正确的C兼容链接。
您可以使用extern
关键字的特殊情况来执行此操作。在声明和定义时:
extern "C" void F1();extern "C" void F1() {}
否则,C链接器将寻找一个仅存在某些错误的C ++名称和不受支持的调用约定的函数。:)
不幸的是,尽管这是您在C 中必须要做的,但语法在C中无效。您必须extern
仅对C
代码可见。
因此,使用一些预处理器魔术:
#ifdef __cplusplusextern "C"
#endif
void F1();
不完全美观,但这是您在两种语言的代码之间共享标头所要付出的代价。
以上是 未定义对函数的引用 的全部内容, 来源链接: utcz.com/qa/426958.html