2

我正在使用 ACE 库来做一些反应堆工作。在 linux 上,默认的 ACE 编译输出是 libACE.so。我通常使用 -lACE 编译选项来编译它,但这取决于我是否在 ld.so.conf.d 目录中配置了 libACE.conf。如果我想子类 ACE_Task,它可以从 ACE.so 导入,编译依赖于 libACE.so,如果我想动态加载 ACE.so,我该怎么做?我试过了,如果我使用 dlopen ,则会发生链接错误。那么,有什么方法可以动态加载 ACE.so 并且仍然可以像这样实现 ACE_Task 吗?

class test: public ACE_Task<ACE_MT_SYNCH>
{

}
4

1 回答 1

1

子类化主要发生在编译时。您需要在某些头文件[s] 中适当地定义超类[es]。

在运行时,重要的是 vtable 和继承的成员函数(可能还有 RTTI)的可用性。

您可能希望将 链接libACE.so到您的共享对象(dlopen您正在构建的 -ed 事物)。这是可能的,例如g++ -rdynamic -shared your*.pic.o -lACE -o yoursharedobject.so

于 2012-12-07T10:06:28.613 回答