Boost.Python 并导入一个 dll,"The specified module could not be found"

Boost.Python and importing a dll, "The specified module could not be found"

前面的软件信息:

MSVC 2008/9.0(我公司很难放手)

提升 1.64

Python 2.7(真的很难放手)

我们正在为我们的一个程序转换 DLL 模块,以便能够 运行 Python 可以与模块接口的脚本,所以我一直在连接 Boost.Python.我按照教程做了一个非常简单的例子:

using namespace boost::python;

BOOST_PYTHON_MODULE(PythonModule)
{
    class_<CPythonModule, boost::noncopyable>("PythonModule")
        .def("foo", &CPythonModule::foo)
        ;
}

(编辑:我在这里使用的 noncopyable 可能是不正确的;我们有一个对象的实例,它将 运行ning python 脚本,并且需要编译以消除 private功能错误)

还有更简单的 Python 脚本,现在除了导入什么都不做:

import PythonModule

一切都已编译,运行 脚本...导入失败。了解到我必须将 DLL 文件扩展名切换为 .pyd,然后再次 运行,遇到一个稍微不同的错误:

ImportError: DLL load failed: The specified module could not be found.

我无法让这个消失。我已经在脚本旁边的 运行ning 目录中包含了 boost DLL,没有骰子。据我所见,它实际上是在查找 .pyd,但之后出现了其他问题。我确定的事情:

C++ 'Additional Include' 包括 "python27\includes" 和 "boost_1_64_0" 的路径。

链接器 'Additional Library' 目录包括 "Python27\libs" 和 "boost_1_64_0\lib32-msvc-9.0" 的路径。

在我浏览 SO 帖子时试图消除错误的过程中,我还继续尝试将这些添加到链接器的附加依赖项中:

C:\local\boost_1_64_0\lib32-msvc-9.0\boost_python-vc90-mt-1_64.lib
C:\local\boost_1_64_0\lib32-msvc-9.0\boost_python-vc90-mt-gd-1_64.lib
C:\local\boost_1_64_0\lib32-msvc-9.0\libboost_python-vc90-mt-1_64.lib
C:\local\boost_1_64_0\lib32-msvc-9.0\libboost_python-vc90-mt-gd-1_64.lib

我的环境路径还包括 Boost、Python,甚至是我尝试从中 运行 运行脚本的特定目录。

确保提供给 BOOST_PYTHON_MODULE() 的名称与二进制名称相匹配。所以对于 BOOST_PYTHON_MODULE(PythonModule),二进制名称应该是 PythonModule.pyd。还要将二进制模块和测试脚本放在同一个文件夹中。

如果这不起作用,请使用 Process Monitor and Dependency Walker 找出发生了什么。例如,可能与系统中安装的其他 python dll 发生冲突,它出现在 PATH 中的版本早于您期望使用的版本。或者由于某种原因无法加载 python dll 或任何其他所需的 dll。等等。这实际上可以是任何东西,您需要自己调查。