是否可以编译具有在编译时无法解析的外部依赖项的静态库?

Is it possible to compile a static library with an external dependancy that is unresolvable at compilation time?

我使用 C 和 C++ 创建了一个 Web 服务器,它的工作方式如下:

现在,如果我想创建另一个站点,我唯一需要更改的代码就是 HandleRequest 函数。

我的意思是想把服务器本身打包成一个静态库,然后在做新网站的时候,只需要在编译的时候写HandleRequest函数和link静态库制作服务器。

当然,当我尝试这样做时,出现了错误 undefined reference to 'HandleRequest'

知道函数的代码是在库之外编写的,是否可以编译库?

编辑:我尝试在不使用 -c 选项的情况下编译 .cpp 文件,因此库已经完成了 linking。我知道使用 -c 选项,一切正常。

另外,我试着把 extern std::string HandleRequest(Request request); 在调用 HandleRequest 但没有成功的函数之前。

快速简便的解决方案

使HandleRequest成为函数指针的全局变量:

std::string (*HandleRequest)(Request);

您可以将旧的 HandleRequest 函数的功能移动到 DefaultHandleRequest 之类的东西中,您甚至可以使用 DefaultHandleRequest:

初始化函数指针
std::string DefaultHandleRequest(Request request)
{
    // stuff
}

std::string (*HandleRequest)(Request) = DefaultHandleRequest;

如果您这样做,您将不必更改任何其他代码,但您可以随时更新 HandleRequest

更彻底的解决方案

我们可以使这个解决方案更加通用,使您能够在同一个程序中拥有多个服务器运行。

为此,制作一个Server class,作为服务器。此 class 的一个实例将充当您的服务器。让 Server 存储一个 std::function<std::string(Request)> 来处理传入的请求。您可以根据需要随时分配或更新它。

设计 Server 以便同时可以有多个实例,每个实例代表一个不同的 server/service,具有自己的 HandleRequest 功能。