Rya*_*yan 4 c c++ static-libraries
我有一个用C编写的静态函数库.假设头文件名为myHeader.h,看起来像:
#ifndef MYHEADER_H
#define MYHEADER_H
void function1();
void function2();
#endif
Run Code Online (Sandbox Code Playgroud)
function1和function2不是什么特别的东西.假设它们存在于名为impl1.c的文件中,如下所示:
#include "myHeader.h"
void function1() {
// code
}
void function2() {
// more code
}
Run Code Online (Sandbox Code Playgroud)
到目前为止提到的所有代码都被编译成一个名为libMyLib.a的静态库.我宁愿不修改用于构建此库的任何代码.我还有一个C++标头(cppHeader.h),它看起来像:
#ifndef CPPHEADER_H
#define CPPHEADER_H
class CppClass {
private:
double attr1;
public:
void function3();
};
#endif
Run Code Online (Sandbox Code Playgroud)
然后cppHeader.cpp看起来像:
#include "cppHeader.h"
#include "myHeader.h"
// constructor
CppClass::CppClass(){}
void CppClass::function3() {
function1();
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我得到一个关于对function1()的未定义引用的错误.我相信在编译时我已正确地链接了所有内容.在我的C++中,我很生气.我确信我只是在做一些愚蠢的事情.我希望我的简单示例代码能很好地说明问题.
在此先感谢您的帮助!
另一个解决方案(对Yann最初提出的解决方案)是用你的"C"标题包围:
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
Run Code Online (Sandbox Code Playgroud)
这使您无需记住:
extern "C" {
#include "foo.h"
}
Run Code Online (Sandbox Code Playgroud)
你使用的每个地方 foo.h