我想在静态库中声明一个名为 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()
。这是如何工作的?在上面的示例中,由于 foo()
的 undefined reference
,静态库当然不会编译。
最佳答案
是的,这是可能的。你已经知道怎么做了。
你的困惑在于
the static library would of course not compile, due to an "undefined reference"
但是“ undefined reference ”不是编译错误——它是由链接器生成的。静态库只是已编译目标文件的未链接集合。 (再加上一个索引,这样链接器就可以有效地找到它需要的目标文件,而无需扫描每个目标文件)
当链接器运行时,它会同时提供应用程序对象和库,并且不会留下任何 Unresolved 问题。
动态库是通过链接步骤创建的;静态库不是。
关于c++ - 在静态库中声明函数,在使用相同库的应用程序中定义它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45869324/