我正在用boost.python构建应用程序。我有一些单独的类名为ScriptsManager
,它具有功能initPython
其作用:Python初始化段错误
mMainModule = bp::import("__main__");
mMainNamespace = bp::import("__dict__");
bp::object ignored = bp::exec("hello = file('hello.txt', 'w')\n"
"hello.write('Hello world!')\n"
"hello.close()", mMainNamespace);
两个mMainModule, mMainNamespace
是boost::python::object
。
所以,当我启动应用程序时,我得到:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ??()
(gdb) bt
#0 0x0000000000000000 in ??()
#1 0x00007ffff5d5efd9 in PyEval_GetGlobals() from /usr/lib/libpython2.7.so.1.0
#2 0x00007ffff5d79113 in PyImport_Import() from /usr/lib/libpython2.7.so.1.0
#3 0x00007ffff5d7935c in PyImport_ImportModule() from /usr/lib/libpython2.7.so.1.0
#4 0x00007ffff5a6d8bd in boost::python::import(boost::python::str)() from /usr/lib/libboost_python.so.1.46.0
#5 0x0000000000510b1b in ScriptsManager::initPython (this=0x7b6850) at /home/ockonal/Workspace/Themisto/src/Core/ScriptsManager.cpp:24
#6 0x0000000000547650 in Application::main (args=...) at /home/ockonal/Workspace/Themisto/src/main.cpp:60
#7 0x00007ffff4ebbf86 in main() from /usr/lib/libclan22App-2.2.so.1
#8 0x00007ffff24c4dcd in __libc_start_main() from /lib/libc.so.6
#9 0x00000000004c9769 in _start()
出了什么问题吗?
UPD1
当我打电话Py_Initialize()
以前bp::import
我得到:
的 实例后终止叫扔 '的boost ::蟒蛇:: error_already_set'
UPD2
看来,问题是代码:
mMainNamespace = bp::import("__dict__");
结果代码:
Py_Initialize();
mMainModule = bp::import("__main__");
mMainNamespace = mMainModule.attr("__dict__");
我不知道它是正确的。
UPD3
没错, -nd更新工作。奇怪的是,mMainNamespace = bp::import("__dict__")
是用官方的助推文档编写的。
你能说清楚:你是嵌入boost python,还是从python中加载模块用C++编写?或者,两者的一些组合...... – James 2011-03-14 17:42:19
我需要两者。首先是使用C++中的boost.python lib来启动python,然后完成我想要的任何事情(也运行我自己的模块)。 – Ockonal 2011-03-14 17:45:14
所以这段错误发生在一个C++宿主进程中,它嵌入了python,然后将(相同或不同的?)代码作为模块加载? – James 2011-03-14 17:50:39