C++运行时类型与Python模块不匹配?

2024-09-28 22:22:08 发布

您现在位置:Python中文网/ 问答频道 /正文

不幸的是,我不能发布这个源代码,但我会尽力设置它。在

我有一个例子,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()的方式是否有导致此类问题的特殊情况?在


Tags: 对象实例可执行文件类型源代码foo链接dynamic