【问题标题】:How to sub a C++ class from a .so on Linux?如何在 Linux 上从 .so 中分出 C++ 类?
【发布时间】:2012-12-07 09:36:33
【问题描述】:

我正在使用 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>
{

}

【问题讨论】:

  • 那么你的库是否配置了ld.so.conf
  • 我已经配置了ld.so.conf,编译也可以,但是当我想在另一台PC上释放所有文件时,我必须配置ld.so.conf,有什么方法可以对来自 .so 文件的类进行子类化,并且我仍然可以在运行时加载它?

标签: linux loadlibrary shared-libraries


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多