在Cygwin/GCC C++程序中嵌入Windows Python
我现在在做一个用C++写的Cygwin/GCC应用程序。这个程序需要嵌入Python来运行插件,我已经成功地使用Cygwin的Python库嵌入了Python,并且能够运行一些简单的Python文件。不过,现在这些Python文件需要用到一个Windows的图形界面框架(wxPython),所以我需要嵌入Windows的Python环境,否则就无法在Python文件中使用这个框架。为了实现这个,我按照这些说明的步骤创建了libpython25.a。然后我使用Windows安装的库和头文件来编译它。但是,当我运行程序时,它崩溃了,并且调试器输出了一些奇怪的信息(调试信息是开启的,真是奇怪)。
gdb: unknown target exception 0xc0000008 at 0x77139a13
Program received signal ?, Unknown signal.
[Switching to thread 2216.0x119c]
0x77139a13 in ntdll!RtlLockMemoryZone () from /cygdrive/c/Windows/system32/ntdll.dll
(gdb) where
#0 0x77139a13 in ntdll!RtlLockMemoryZone () from /cygdrive/c/Windows/system32/ntdll.dll
#1 0x030c1c7c in ?? ()
#2 0x030c1c80 in ?? ()
#3 0x1e0d0e80 in python25!_PyTime_DoubleToTimet ()
from /cygdrive/c/Windows/SysWOW64/python25.dll
#4 0x00000000 in ?? ()'
如果有人成功做到了这一点,我将非常感激你的帮助。把Windows的Python嵌入到Cygwin/GCC程序中可行吗?如果不行,我还有什么其他选择?(现在我只想到转到VC++,但这会很麻烦,而且我也不想用X11来做图形界面)。
2 个回答
0
看起来你遇到了32位和64位不匹配的问题。
你是在一台64位的机器上运行代码(因为有一个叫SysWow64的文件夹),但我猜你的python25.dll是32位的。让人困惑的是,“system32”文件夹里其实是包含64位的DLL文件。
+我觉得调试功能没有开启,你只能看到公共符号。
0
这不是一个直接的答案,但你可以把系统分成两个部分:一个是Cygwin的部分(用Python和C++,不使用wxPython),另一个是win32的部分(用Python和wxPython)。然后你可以通过一些方法,比如RPyC或者XML-RPC,来让这两个部分进行沟通。