我试图从python调用C++ API。以下是伪造形式的代码。dynamic_cast在从Python调用C++ API时失败
class Engine { // Singleton Class which does a heavy duty work
public:
static Engine* getEngine();
bool init();
private:
static Engine* m_instance;
Engine();
};
// Following the code to wrap the call to engine to call from python
// Its only a simplified form
//engine_module.c
#include <Engine.h>
PyObject* initengine() {
Engine* e = Engine::getInstance();
e->init();
// return the Py_BuildValue ...
}
PyObject* initengine_module() {
//... init the module
}
// Python code
import engine_module
status = engine_module.init()
问题: 引擎类是libengine.so,当它inits,因为内部的dynamic_cast失败,失败。引擎轮流使用dlopen()加载其他库。我在搜索网络时添加了RTDL_GLOBAL和-E选项,但仍未解决。我是否应该在编译python的时候添加-E选项? 在C++代码中使用Engine类时能够完美地工作,而在python中使用时不起作用的原因是什么?
编辑1: 为了阐明来自猫++这样的问题: libengine.so具有在内部引擎::的init()使用的dynamic_cast <>许多其他类。 dynamic_cast中涉及的类根本不暴露给python。只有Engine :: init()被公开。
编辑2: 该平台是Red Hat Linux和编译器是英特尔
这段代码都没有'dynamic_cast'。另外,不要使用单身人士。 –
libengine.so有很多其他的类,内部在Engine :: init()中使用dynamic_cast <>。 dynamic_cast中涉及的类根本不暴露给python。只有Engine :: init()被公开。 – Sudeep
如果你用C++编写测试程序,并调用'Engine :: init',它会工作吗? –