Boost.Python并导入一个dll,“找不到指定的模块”

时间:2018-07-27 17:23:31

标签: python c++ boost visual-studio-2008 boost-python

预先的软件信息:

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)
        ;
}

(编辑:我在这里使用的不可复制性可能是不正确的;我们有一个将运行python脚本的对象的实例,并且需要进行编译以消除私有函数错误)

还有一个甚至更简单的Python脚本,它除了导入外什么都不做:

import PythonModule

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

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

我无法使这个消失。我在脚本旁边的运行目录中包含了Boost DLL,没有骰子。从我所看到的,它实际上是在找到.pyd,但是之后又出了点问题。我已经确定的事情:

C ++的“附加包含”包括指向“ python27 \ includes”和“ boost_1_64_0”的路径。

链接器“附加库”目录包含指向“ Python27 \ libs”和“ boost_1_64_0 \ lib32-msvc-9.0”的路径。

在尝试消除SO帖子中的错误的过程中,我也继续尝试将它们添加到Linker的其他依赖项中:

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,甚至是我尝试从中运行脚本的特定目录。

1 个答案:

答案 0 :(得分:0)

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

如果这不起作用,请使用Process MonitorDependency Walker找出正在发生的事情。例如,可能与您系统中安装的其他python dll发生冲突,该DLL出现在PATH上的版本早于您希望使用的版本。或者由于某种原因,无法加载python dll或任何其他必需的dll。等等。这实际上可以是任何东西,您需要自己进行调查。