我创建了一个可执行文件,链接到一个static库。 但我想创建另一个程序,它可以更改此库中定义的 1 个方法的行为,而无需重新编译。我无法使用 LD_PRELOAD,因为它不是共享库。
例如:
App1
-> StaticLib1
:
void DoSmth() { ... original behavior ... }
Lib2
(静态或动态):
void DoSmth() { ... override behavior... }
App2
:启动 App1
并导致调用 Lib2
中的方法而不是 StaticLib1
。
有什么想法如何实施吗?可以吗?
平台:Linux
要能够跨多个库覆盖相同的类方法,您需要实现的关键是确保默认实现是虚拟的,然后后续子类覆盖默认实现
假设你有app.h
class App { virtual void DoSmth(){ // Default }};
然后在您想要更改默认实现的库中,例如 app2.h
class App2 : public App { void DoSmth() override { // Overridden }};
如何调用它取决于您,但只要您的类以这种方式链接,那么您就可以像这样调用默认方法或重写方法
App* app = new App();
App* app2 = new App2();
应用程序->DoSmth();
app2->DoSmth();