我有一个适用于C++代码的python包装器(如这里所建议的那样,从python调用C/C++?)使用ctypes。但问题出在代码的主要功能上。当我做类似的事情时
extern "C" {
void call_main(){ main();}
}
在我的c++代码中,然后通过python包装调用此函数
...
lib = cdll.lib('./mylib.so')
def run():
lib.call_main()
->我有"分段错误"。
有趣的是,当我将我的主要方法代码复制粘贴到名为e.test的函数中时(所以它是c++代码中的int test(){…#pasted code…}),将其外部化,然后调用lib.test()
=>一切都很好。。。因此,主函数被称为main或的东西一定是个问题
在C++中,不允许递归调用main()
(请参见3.6.1,basic.start.main,第3段)。此外,当您想要调用C++功能时,您需要一个支持C++的入口点。有时,您可以在没有这一点的情况下调用C++功能,但什么有效,什么无效并不是完全直接的。显而易见的问题是全局对象需要初始化。
只需将要调用的代码放入另一个函数中并调用即可。