我想在静态库中声明一个名为 foo()
的函数,并从静态库中调用它。但是,我想强制应用程序的用户提供 foo()
的定义。在 C/C++ 中有这样的可能吗?
举个例子,想象一下这是静态库:
在 foo.h 中:
void foo();
在 foo.cpp 中:
#include "foo.h"
int main() {
foo();
return 0;
}
然后在使用此静态库的应用程序中:
在 app.cpp 中:
#include "foo.h"
void foo() {
// Do something here...
}
我想这一定是什么,例如Win32 API 使用他们的
WinMain()
函数,它基本上取代了通常的 main()
。这如何工作?在上面的例子中,静态库当然不会编译,因为 undefined reference
到 foo()
。 最佳答案
是的,有可能。你已经知道如何了。
你的困惑在于
但是“ undefined reference ”不是编译错误——它是由链接器生成的。静态库只是未链接的已编译目标文件的集合。 (加上可能是一个索引,所以链接器可以有效地找到它需要的目标文件,而无需扫描每个文件)
当链接器确实运行时,它将提供应用程序对象和库,并且不会有任何 Unresolved 问题。
动态库是通过链接步骤创建的;静态库不是。
关于c++ - 在静态库中声明函数,在使用相同库的应用程序中定义它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45869324/