【发布时间】:2018-01-31 15:03:04
【问题描述】:
我正在使用 Python 的 3.6.4 源代码版本。我可以使用 Visual Studio 作为动态库 (/MDd) 轻松构建它。我可以将 Python .dll 链接到我自己的代码并验证其操作。
但是当我使用 (/MTd) 构建它(和我的代码)时,当我尝试使用 Python 程序打开一个文件时,它很快就会脱轨。 read.cpp ("Expression: _osfile(fh) & FOPEN") 中的调试断言失败。我认为正在发生的是 Python .dll 与不正确的系统库链接。我不知道如何让它与正确的链接(静态库)。
【问题讨论】:
-
这是一个断言,而不是
run off the rails。这并不意味着存在任何链接错误 - 如果存在链接错误,您将无法使用任何一个库,更不用说在其中执行断言了。这意味着代码正在尝试从已关闭的文件中读取或它是using file functions on socket handles。在 Windows 中,套接字不是文件。你想建立什么来源?您是否检查过适用于 Windows 的 Python 二进制文件是如何构建的?有些东西告诉我他们使用不同的功能 -
如果使用 /MDd 构建,我的代码可以正常工作。
-
embeddable python.dll 也可以使用,可以在 python.org 下载。可能发生的情况是您链接到一个使用文件函数而不是套接字函数的库。 VS 为 C++ 提供了远比 C 更好的支持 - 它是 C++ 的最佳编译器之一,而 C 在 VS 2017 年之前基本上被放弃了。也许你会在 VS 中获得更好的运气2017. 我会先检查 Windows 的构建说明。
-
提示:“该解决方案没有静态库配置。但是,构建静态库而不是 DLL 很容易。您只需将“配置类型”设置为“静态库( .lib)”并将预处理器宏“Py_ENABLE_SHARED”更改为“Py_NO_ENABLE_SHARED”。您可能还必须将“运行时库”从“多线程 DLL (/MD)”更改为“多线程 (/MT)”。 "
标签: python visual-studio-2015 static-libraries libcmtd