gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:16 26 4
gpt4 key购买 nike

不幸的是,我无法发布其源代码,但我会尽力设置它。

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

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

所以显然某个地方存在 RTTI 问题。类实现(基类和派生类)位于一个共享库中,故障代码位于第二个共享库中,该共享库作为 Python 模块加载到 Python 解释器中(全部在 Linux 上,使用 gcc 4 或 Intel C++ 编译器时出现同样的问题)。如果我编写一个链接两个共享库的简单的小测试可执行文件,则一切正常。我在链接共享库时尝试过 --export-dynamic 但没有成功(看起来它是用于可执行文件的)。有人可以指点一下去哪里看吗? Python 使用 dlopen() 的方式有什么特殊之处会导致此类问题吗?

最佳答案

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

关于C++ 运行时类型与 Python 模块不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10434806/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com