C ++中的独立Python解释器[重复]

Posted

技术标签:

【中文标题】C ++中的独立Python解释器[重复]【英文标题】:Standalone Python interpreter in C++ [duplicate] 【发布时间】:2016-08-09 12:05:57 【问题描述】:

我正在尝试将 python35.dll 静态链接到我的 win32 API 应用程序,因为我必须使其独立。我已经分别设置了 $(SolutionDir)\inlcude 和 $(SolutionDir)\libs 的包含和库路径,并在 C/C++->Code Generation to Multi-threaded(/MT) 下设置了运行时库。我还将 python35.lib 添加到链接器->输入->附加依赖项。

现在,当我将 python35.dll 与 .exe 放在同一文件夹中时,我的 .exe 正在工作,但我必须将该 .dll 作为 .exe 的一部分,因此它可以是独立的。

我在 *** 上阅读了许多其他问题并尝试了所有方法,但我肯定遗漏了一些东西。 我将不胜感激任何帮助。

提前谢谢你。

编辑:好的,我必须在这里更改一个主题,因为我已经这样做并找到了解决方案,但似乎我忘记了真正的问题。

我有什么方法可以在我的 winapi 程序中创建 wrap python,这样它的用户就不必安装 Python 来让它工作?

注意:抱歉,我在 Python 和 C++ 方面都没有太多经验。我还根据新问题更新了标题。

【问题讨论】:

您不能静态链接一个动态链接库。如果您想拥有一个可执行映像,则必须将 DLL 作为二进制资源嵌入,并按需提取。一种方法是/DELAYLOAD python35.dll,并处理相应的回调(请参阅Linker Support for Delay-Loaded DLLs,特别是Understanding the Helper Function 了解详细信息)。 也许您只是想要一个安装程序包,以便您有 1 个 exe 可以分发?? 这行不通。你需要顺流而下,而不是逆流而上。请确保您遵守 Python 许可证。 我有什么方法可以将 wrap python 创建到我的 winapi 程序中,这样它的用户就不必安装 Python 来让它工作? b> 为您的应用程序创建一个包含 python 的安装程序包。不过我会先检查 Python 许可证。 编辑:好的,我必须在这里更改一个主题一旦问题结束,更改主题很可能无济于事。 【参考方案1】:

静态链接意味着在您的可执行文件中嵌入一个库。 根据定义,DLL 是动态链接库。

如果您想静态链接一个库,您需要构建或获取一个预构建的静态库,而不是动态库。或者,只需动态链接并将 dll 与 exe 一起发送,就像您已经实现的那样。

【讨论】:

以上是关于C ++中的独立Python解释器[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python中的多行注释[重复]

Python3中的优雅字符串解析[重复]

Python中的循环计算[重复]

Python的枚举等价物[重复]

python如何删除list里重复的元素

Python中的zip耗尽迭代器[重复]