在 Cygwin/GCC C++ 程序中嵌入 Windows Python

Posted

技术标签:

【中文标题】在 Cygwin/GCC C++ 程序中嵌入 Windows Python【英文标题】:Embedding Windows Python in Cygwin/GCC C++ program 【发布时间】:2009-08-20 20:17:15 【问题描述】:

我目前正在开发一个用 C++ 编写的 Cygwin/GCC 应用程序。该应用程序需要嵌入 python 来运行插件,我已经使用 Cygwin python 库成功嵌入,并且能够运行简单的 python 文件作为程序的一部分。但是,python 文件现在需要使用 windows GUI 框架 (wxPython),因此我需要能够嵌入 Windows Python 环境,否则我无法在 python 文件中使用该框架。为了尝试做到这一点,我使用these instructions 的第 2 步创建了 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 ?? ()'

如果有人成功完成此操作,我将非常感谢您的帮助。是否可以在 Cygwin/GCC 程序中嵌入 Windows python?如果不是,我的其他选择是什么? (现在我只能考虑迁移到 VC++,但这会非常激烈,而且我不想将 X11 用于 GUI)。

【问题讨论】:

将 unix cpython 与 windows cpython 的东西混合在一起是一个痛苦的世界。欢迎使用它。我猜一年过去了,仍然无法完成这项工作? 【参考方案1】:

不是一个直接的答案,但您可以将系统分成 2 个进程 - Cygwin 一个(Python 和 C++,没有 wxPython)和 win32 一个(Python 和 wxPython),并通过RPyC,XML-RPC 在它们之间进行通信等。

【讨论】:

嗯...不错。查看 RPyC,似乎我们会在 Cygwin 端编写 Python 代码来处理程序和单独的插件进程之间的通信。我们的应用程序已经是多线程的,所以我想我们可以将它扩展为多进程。感谢您的建议,看起来很复杂,但这是迄今为止最好的主意。我需要进一步调查。【参考方案2】:

看起来您的 32 位/64 位不匹配。

您在 64 位机器上运行代码(因为有一个 SysWow64 文件夹),但我猜您的 python25.dll 是 32 位的。令人困惑的是“system32”包含 64 位 DLL。

+我不认为调试是打开的,你只能看到公共符号。

【讨论】:

以上是关于在 Cygwin/GCC C++ 程序中嵌入 Windows Python的主要内容,如果未能解决你的问题,请参考以下文章

gcc和MinGW的异同(在cygwin/gcc做的东西可以无缝的用在linux下,没有任何问题,是在windows下开发linux程序的一个很好的选择)

Cygwin、gcc 和 C_INCLUDE_PATH

Msys/MinGW与Cygwin/gcc

Cygwin gcc 正在为我的符号添加下划线“_”前缀。我在哪里可以找到有关此行为的文档?

在 Python GUI 中嵌入 C++ 程序

在 C++ 应用程序中嵌入 python 环境