gpt4 book ai didi

c++ - 共享对象取决于代码中的符号动态链接吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:30:41 27 4
gpt4 key购买 nike

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

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 时,它将调用动态链接它的应用程序提供的方法。这可能吗?通常,应用程序依赖于共享对象提供的符号,但是否可以让共享对象依赖于动态加载它的二进制文件中的符号?

最佳答案

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

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

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()包装成一个工厂,并使用C++虚函数机制。我只是在展示主要思想。

关于c++ - 共享对象取决于代码中的符号动态链接吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58757166/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com