2017-08-14 150 views
0

虽然试图在Visual Studio上安装Boost Python我得到的结果很少。我能够创建Boost.Python库,并且boost_python ... lib文件也已经创建,这使我花了很长时间才弄清楚如何实现这一点。提升Python找不到dll文件

但是,现在在visual studio中,在向链接器添加include和库路径之后,我无法获得一个小测试程序来工作。

当试图运行下面的代码行:

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库正常工作吗?如果需要其他信息,请询问我将添加它,但由于我不熟悉boost和链接,因此我不确定哪些信息是相关的。

回答

2

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

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

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

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

如果SafeDllSearchMode被禁用,检索顺序如下:

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

Taken from here

+0

所以,如果我复制粘贴* .dll文件到哪里我的* .exe是我应该没事相同的目录?或者“自定义构建步骤”是什么意思。 –

+0

是的,它应该没问题,但如果你考虑专业程序员的职业生涯,你的构建过程应该是自动的。为了使其自动化,您可以添加“复制”命令作为自定义构建步骤。但还有其他选择。 –

+0

好吧,我爱你,我调查了如何处理* .dll文件,而且现在我以前并不了解这么多。我创建了一个后期构建脚本,将* .dll文件复制到目标目录中 –