我有一个用于C ++代码的工作python包装器(如Calling C/C++ from python?所示 )使用ctypes。但问题在于代码的主要功能。当我做
之类的事情 extern "C" {
void call_main(){ main();}
}
在我的c ++代码中,然后通过python wrapper
调用此函数 ...
lib = cdll.lib('./mylib.so')
def run():
lib.call_main()
- >我得到“分段错误”。
有趣的是,当我将我的主要方法代码粘贴到称为例如test(所以它是c ++代码中的int test(){.... #gressed code}},extern它然后调用lib.test()
=>并且eveything工作正常......所以它必须是主函数被称为main或者
的问题答案 0 :(得分:2)
在C ++中,不允许递归调用main()
(参见3.6.1,basic.start.main,第3段)。此外,当您要调用C ++功能时,需要一个C ++感知入口点。你有时可以在没有这个的情况下放弃调用C ++功能,但是什么是可行的,什么不是不完全是直截了当的。显而易见的问题是需要初始化的全局对象。
只需将您要调用的代码放入其他函数并调用它即可。