如何在一个静态库中创建一个空实现 class 而在另一个静态库中提供具体实现?

How to make an empty implementation class in one static library and instead provide concrete implementation in another static library?

标题可能会让人难以理解,让我在这里澄清一下:

我正在使用 CPP 开发两个静态库 A 和 B。我想创建一个 class 可能被两个库共享的 Processor,并且 class 将有一个名为 process().

的成员函数

我想实现:

当从应用程序链接 A 和 B 时,调用进程将使用 B 中定义的具体实现,

Processor* object = new Processor();
object->process()//process() will have its non-empty implementation in B

但是当仅链接 A 时,实现将为空(因为 B 未链接),因此该函数将不执行任何操作。

正如@TedLyngmo 所说,您可以同时拥有 AB 而 link 只有其中之一:

A

class Process {
public:
    void process() { }
};

B

class Process {
public:
    void process() { // do something }
};

和linkAB看你要什么,空不空

如果你想 link 两者,你可以将 B 的 linker 选项放在 A 之前,这样 linker 就会看到B 中的符号并且不在 A 中搜索。

这是自找麻烦,好像A中有符号需要link,Process会有多个定义。我想这可能取决于 linker 的实现。