gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:35:36 25 4
gpt4 key购买 nike

前面的软件信息:

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

boost 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 的使用可能不正确;我们有一个将运行 python 脚本的对象实例,需要编译它以消除私有(private)函数错误)

还有更简单的 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 帖子时试图消除错误的过程中,我还继续尝试将这些添加到链接器的附加依赖项中:

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 MonitorDependency Walker弄清楚发生了什么。例如,可能与系统中安装的其他 python dll 发生冲突,这些 dll 出现在 PATH 中的版本早于您期望使用的版本。或者由于某种原因无法加载 python dll 或任何其他所需的 dll。等等。这实际上可以是任何东西,您需要自己调查。

关于python - Boost.Python 并导入一个 dll, "The specified module could not be found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51562800/

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