从C ++引用静态库中的C函数

我有一个用C编写的静态函数库。假设头文件名为myHeader.h,看起来像:

#ifndef MYHEADER_H #define MYHEADER_H void function1(); void function2(); #endif 

function1和function2不是什么特别的东西。 假设它们存在于一个名为impl1.c的文件中,它看起来像:

 #include "myHeader.h" void function1() { // code } void function2() { // more code } 

到目前为止提到的所有代码都被编译成一个名为libMyLib.a的静态库。 我宁愿不修改用于构建此库的任何代码。 我还有一个C ++标题(cppHeader.h),如下所示:

 #ifndef CPPHEADER_H #define CPPHEADER_H class CppClass { private: double attr1; public: void function3(); }; #endif 

然后cppHeader.cpp看起来像:

 #include "cppHeader.h" #include "myHeader.h" // constructor CppClass::CppClass(){} void CppClass::function3() { function1(); } 

当我尝试编译它时,我得到一个关于对function1()的未定义引用的错误。 我相信在编译时我已经正确地连接了所有内容。 在我的C ++中,我很生气。 我确信我只是在做一些愚蠢的事情。 我希望我的简单示例代码能很好地说明问题。

在此先感谢您的帮助!

另一个解决方案(对Yann最初建议的解决方案)是用你的“C”标题包围:

  #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus } #endif 

这使您无需记住:

  extern "C" { #include "foo.h" } 

你使用foo.h每个地方

一定要使用:

 extern "C" { #include "myHeader.h" } 

否则C ++编译器将生成名称受损的符号名称。