我想在静态库中声明一个名为 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 referencefoo()

最佳答案

是的,有可能。你已经知道如何了。

你的困惑在于



但是“ undefined reference ”不是编译错误——它是由链接器生成的。静态库只是未链接的已编译目标文件的集合。 (加上可能是一个索引,所以链接器可以有效地找到它需要的目标文件,而无需扫描每个文件)

当链接器确实运行时,它将提供应用程序对象和库,并且不会有任何 Unresolved 问题。

动态库是通过链接步骤创建的;静态库不是。

关于c++ - 在静态库中声明函数,在使用相同库的应用程序中定义它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45869324/

10-13 09:07