我正在使用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 。
但是,在编译期间,我得到了错误
未定义的引用符号'pthread_key_delete @@ GLIBC_2.2.5
什么是未定义的引用/无法parsing的外部符号错误,我该如何解决?
C ++链接器错误,对应该从共享对象引用的项目的未定义引用
如何在失败的编译中find缺失的依赖项?
C链接器:在运行时处理符号查找错误
fileA.c: (.text+0x2b7): undefined reference to `F1'
哪里不对?
谢谢。
ETA:感谢我收到的答案,我现在有以下几点:
在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
将程序链接到Eclipse中的C ++项目? Linux的
未定义的引用“inflateInit2_”
链接错误“未定义的参考”在编译期间关于boost静态库
DSO从命令行中丢失
如果你真的把C编译为C而不是C ++,那么你需要确保函数具有适当的C兼容链接。
您可以使用extern关键字的特殊情况来做到这一点。 在声明和定义上:
extern "C" void F1(); extern "C" void F1() {}
否则,C链接器将会寻找一个只存在于一些错误的C ++名称和不受支持的调用约定的函数。