0

不幸的是,我无法为此发布源代码,但我会尽我所能进行设置。

我有一个例子,dynamic_cast 无法转换为派生类类型,我知道它应该成功(即,我知道实例的实际类型)。堆分配对象的 typeid 也不等于堆栈分配对象的 typeid!IE,

Foo mstack;
Foo*mheap = new Foo();
typeid(mstack) == typeid(*mheap);  // returns FALSE!?

因此,某处显然存在 RTTI 问题。类实现(对于基类和派生类)在一个共享库中,故障代码在第二个共享库中,该库作为 Python 解释器中的 Python 模块加载(全部在 linux 上,使用 gcc 4 或英特尔 C++ 编译器)。如果我编写一个简单的小测试可执行文件来链接两个共享库,那么一切正常。我在链接共享库时尝试过 --export-dynamic ,但没有成功(看起来它是为了与可执行文件一起使用)。有人对在哪里看有任何指示吗?Python 使用 dlopen() 的方式有什么特别之处会导致这种问题吗?

4

1 回答 1

0

这是由 Python 加载扩展模块引起的RTLD_LOCAL,解决方案是强制 Python 加载它RTLD_GLOBAL(参见 OP 的评论)。

于 2012-05-12T16:19:20.550 回答