未定义引用一个函数

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

相关文章

引言 本文从Linux小白的视角, 在CentOS 7.x服务器上搭建一个...
引言: 多线程编程/异步编程非常复杂,有很多概念和工具需要...
一. 宏观概念 ASP.NET Core Middleware是在应用程序处理管道...
背景 在.Net和C#中运行异步代码相当简单,因为我们有时候需要...
HTTP基本认证 在HTTP中,HTTP基本认证(Basic Authenticatio...
1.Linq 执行多列排序 OrderBy的意义是按照指定顺序排序,连续...