我正在使用Linux,我有以下文件:
main.c, main.h
fileA.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
__cplusplus
,而不是__cpluplus
。问题在于:你的C代码可以看到函数声明两次。一次来自头文件(你没有使用宏的地方:这是你应该这样做的唯一位置,因为这是跨语言共享的代码),另一次来自fileA.c
,在那里你根本不应该编写声明。 - Lightness Races in OrbitfileB.h
声明了头文件?你的 C 代码仍然可以看到一行extern "C"
。考虑一下哪些包含项放在哪里。你应该在一个头文件中声明函数,并在一个源文件中定义它。可以在许多地方包括(多亏了我们的宏技巧)将此头文件包含在 C 源文件中。 - Lightness Races in Orbit