微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未定义引用一个函数

我正在使用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 ++名称和不受支持调用约定的函数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐