gpt4 book ai didi

python - 使用 Visual Studio 2010 静态链接到 Python C API

转载 作者:太空狗 更新时间:2023-10-29 21:39:36 24 4
gpt4 key购买 nike

我正在一个构建 dll 的现有 C++ 项目中工作。我正在尝试使用 C api 调用 python。我可以使用 #include <boost/python.hpp>或者只是 #include <Python.h>我的代码工作正常。

我已将链接器指向包含 python27.lib 的文件夹(MyProject -> Properties -> ConfigurationProerties -> Linker -> General -> Additional Library Directories),因此我希望它静态链接到 python。

我的问题是,当我查看使用 Dependency Walker 时,我发现我的 dll 依赖于 python27.dll。

这是我真正想要静态链接到 python 的情况。

我做了很多研究并尝试了各种预处理器指令,但没有成功。感谢您的帮助

最佳答案

解决如下:

正如 Matt 指出的那样,Python 附带的 lib 文件不是静态库,而只是 stub 文件。

因此我下载了 python 源代码并构建了它。要建立我的项目链接,我必须:

  1. 在 python 项目及其所有依赖项中,将 Properties -> General -> ConfigurationType 更改为 Static library。对于可执行文件(make_buildinfo和make_versioninfo),需要先构建一次可执行文件以获得.exe,然后构建静态库以获得.lib文件。
  2. 这样做:Compiling Python to a static lib and using pythoncore.lib
  3. 设置预处理器宏 Py_NO_ENABLE_SHARED(确保未设置 Py_ENABLE_SHARED)
  4. 将pyconfig.h复制到Python Include目录
  5. 使用纯 Python C API(放弃使用 Boost Python,因为它是动态链接到 Python)
  6. 在调用 Py_Initialize() 之前将这些行添加到 cpp 文件中:

    //这些(或它们的子集)是必需的,以便它使用静态链接的 python,并且不会尝试从默认位置加载 python。Py_NoSiteFlag = 1;Py_FrozenFlag = 1;Py_IgnoreEnvironmentFlag = 1;Py_SetPythonHome("");Py_SetProgramName("");

  7. 对于 64 位编译,需要为每个项目设置 Project Settings -> Configuration Properties -> Librarian -> General -> Target Machine。请注意,lib 文件放在 PCbuild\amd64(不是 PCbuild)中

谢谢

关于python - 使用 Visual Studio 2010 静态链接到 Python C API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32508431/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com