【问题标题】:Boost Python not finding dll fileBoost Python找不到dll文件
【发布时间】:2018-01-21 20:30:33
【问题描述】:

在尝试在 Visual Studio 上安装 Boost Python 时,我得到的结果很少。我能够创建 Boost.Python 库,并且还创建了 boost_python...lib 文件,这让我花了很长时间才弄清楚如何实现这一点。

但是,现在在 Visual Studio 中,将包含和库路径添加到链接器后,我无法让小型测试程序工作。

尝试运行以下代码行时:

Py_Initialize();
using namespace boost::python;
object main_module((handle<>(borrowed(PyImport_AddModule("__main__")))));

我收到以下错误

程序无法启动,因为缺少 boost_python-vc141-1_65.dll....

当我查看库所在的 boost 文件夹(在 stage 文件夹中)时,我可以清楚地看到这个文件,并且我已经将程序链接到这个文件夹。

我尝试了各种不同的 Boost 版本。

最新的稳定版本,所以 1.64 与 beta 1.65 有同样的问题。在之前的版本 1.61 中,我什至无法构建 Boost.Python。

我还尝试了不同的 Python 版本,3.6 和现在的 2.7。我已经卸载了所有其他版本的 Python,所以只有 2.7 版本。我还确保在系统变量中设置了 PYTHONHOME 和 PYTHONPATH。 ? 我是否遗漏了一些重要的东西来让这个 Boost Python 库工作?如果需要任何其他信息,请询问,我会添加它,但由于我不熟悉提升和链接,我不确定哪些信息是相关的。

【问题讨论】:

    标签: python c++ python-2.7 visual-studio-2017 boost-python


    【解决方案1】:

    在 Windows 上没有 /usr/shared 目录,所以 boost 构建脚本不能为每个人安装一个 dll 库。所以你应该自己做这项工作。

    您的 dll 文件必须与您的 exe 文件位于同一目录中。当你编译 boost 时,它在 boost 输出目录中创建了 dll 库(搜索这个文件)。因此,您必须通过自定义构建步骤或其他方式将此 *.dll 文件复制到您的输出目录(C++ 编译器/链接器在其中创建您的 *.exe)。

    如果启用SafeDllSearchMode,搜索顺序如下:

    • 加载应用程序的目录。
    • 系统目录。使用 GetSystemDirectory 函数获取该目录的路径。
    • 16 位系统目录。没有函数获取这个目录的路径,但是搜索到了。
    • Windows 目录。使用 GetWindowsDirectory 函数获取该目录的路径。
    • 当前目录。
    • PATH 环境变量中列出的目录。请注意,这不包括每个应用程序的路径 由 App Paths 注册表项指定。应用程序路径键不是 在计算 DLL 搜索路径时使用。

    如果禁用SafeDllSearchMode,搜索顺序如下:

    • 加载应用程序的目录。
    • 当前目录。
    • 系统目录。使用 GetSystemDirectory 函数获取该目录的路径。
    • 16 位系统目录。没有函数获取这个目录的路径,但是搜索到了。
    • Windows 目录。使用 GetWindowsDirectory 函数获取该目录的路径。
    • PATH 环境变量中列出的目录。请注意,这不包括由
    • 指定的每个应用程序路径
    • 应用程序路径注册表项。 App Paths 键在以下情况下不使用 计算 DLL 搜索路径。

    Taken from here

    【讨论】:

    • 因此,如果我将 *.dll 文件复制粘贴到我的 *.exe 所在的同一目录中,我应该没问题吗?或者“自定义构建步骤”是什么意思。
    • 是的,应该没问题,但是如果您考虑专业程序员的职业,您的构建过程应该是自动的。为了使其自动化,您可以添加“复制”命令作为自定义构建步骤。不过,还有其他选择。
    • 好吧,我爱你,我研究了如何处理 *.dll 文件,现在很有意义,我以前不明白。我创建了一个后期构建脚本,它将 *.dll 文件复制到目标目录
    • 另外,忘了告诉,请注意每个 dll 文件可能有两个或多个版本 - 速度较慢、较大,但包含调试符号,因此您可以使用调试器进入其功能,并且较小为您的发布构建提供快速版本。
    猜你喜欢
    • 2015-01-17
    • 2014-04-26
    • 2022-01-02
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多