如何在一个静态库中创建一个空实现 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 所说,您可以同时拥有 A
和 B
而 link 只有其中之一:
A
class Process {
public:
void process() { }
};
B
class Process {
public:
void process() { // do something }
};
和linkA
或B
看你要什么,空不空
如果你想 link 两者,你可以将 B
的 linker 选项放在 A
之前,这样 linker 就会看到B
中的符号并且不在 A
中搜索。
这是自找麻烦,好像A
中有符号需要link,Process
会有多个定义。我想这可能取决于 linker 的实现。
标题可能会让人难以理解,让我在这里澄清一下:
我正在使用 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 所说,您可以同时拥有 A
和 B
而 link 只有其中之一:
A
class Process {
public:
void process() { }
};
B
class Process {
public:
void process() { // do something }
};
和linkA
或B
看你要什么,空不空
如果你想 link 两者,你可以将 B
的 linker 选项放在 A
之前,这样 linker 就会看到B
中的符号并且不在 A
中搜索。
这是自找麻烦,好像A
中有符号需要link,Process
会有多个定义。我想这可能取决于 linker 的实现。