共享对象根据代码中的符号动态链接吗?

我有一个共享对象my_lib.cc,它在其标头中定义了一个类以及一个工厂函数:

extern Foo* GetFoo():

class Foo {
 public:
  Foo() {}
  virtual ~Foo() {}
};

现在,我希望使用main.cc库的应用程序包含:

#include "my_lib.h"

class Bar : public Foo {
  // ...
};

Foo* GetFoo() {
  return new Bar();
}

关键是,当共享库中的代码需要创建Foo时,它将调用应用程序提供的方法来动态链接它。这可能吗?通常,应用程序依赖于共享对象提供的符号,但是共享对象是否可能取决于动态加载二进制文件中的符号?

jishuailove 回答:共享对象根据代码中的符号动态链接吗?

动态链接是一种方式,从库的用户→到库。

从库到用户的回调通常是通过函数指针完成的:

my_lib.cc中:

Foo* (*MakeFoo)();

void setFooFactory(Foo* (*pMakeFoo)()) {
   MakeFoo = pMakeFoo;
}

然后在main.cc中输入

Foo* MakeBar() {
  return new Bar();
}

int main() {
    // load my_lib ...
    setFooFactory(MakeBar);

    // . . .
}

您还可以将MakeFoo()包装到工厂class中,并使用C ++虚拟函数机制。我只是在演示主要思想。

本文链接:https://www.f2er.com/3141526.html

大家都在问