不幸的是,我不能发布这个源代码,但我会尽力设置它。在
我有一个例子,dynamic_cast无法强制转换为派生类类型,我知道它应该成功(即,我知道实例的实际类型)。 另外,堆分配对象的typeid不等于堆栈分配对象的typeid!!也就是说
Foo mstack;
Foo*mheap = new Foo();
typeid(mstack) == typeid(*mheap); // returns FALSE!?
所以很明显在某个地方存在RTTI问题。类实现(对于基础和派生类)都在一个共享库中,故障代码位于第二个共享库中,它在Python解释器中作为Python模块加载(所有在Linux上,使用GCC 4或英特尔C++编译器时都会遇到同样的问题)。如果我编写一个链接两个共享库的简单的小测试可执行文件,一切正常。我尝试过——在链接共享库时导出动态(看起来它是为可执行文件而设计的)。 有人能告诉我去哪儿找吗?Python使用dlopen()的方式是否有导致此类问题的特殊情况?在
这是由Python用
RTLD_LOCAL
加载扩展模块引起的,解决方案是强制Python用RTLD_GLOBAL
加载它(参见OP的注释)。在相关问题 更多 >
编程相关推荐