【发布时间】:2011-03-13 20:53:28
【问题描述】:
我有一个用 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++ 生疏了。我确定我只是在做一些愚蠢的事情。我希望我的简单示例代码能够很好地说明问题。
提前感谢您的帮助!
【问题讨论】:
-
不能说
C++,但在C中,你可能想让你的函数声明正确的原型......只需为参数指定void:void function1(void);跨度> -
@pmg - 我认为自 1989 年以来就不再是“必需的”了!
-
@awoodland:在当前的C99中
void function1();是一个声明;void function2(void);是一个原型。根据它的实现方式,您可以将 function1 称为function1();或function1(foobar)或 ...; function2 必须被称为function2()并相应地实现。 -
@pmg - 有趣。显示我使用了多少 C!
标签: c++ c static-libraries