导入错误。pybind11和PCL加载DLL失败。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了导入错误。pybind11和PCL加载DLL失败。相关的知识,希望对你有一定的参考价值。

我正在使用 pybind11 为一个小的 C++ 类创建一个 Python 包装器。当导入 DLL 时,我得到以下错误 (运行 python -v 来显示Traceback).该类只有两个成员--来自PCL库的类型。

>>> from a_py import *
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 657, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 556, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 1101, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: DLL load failed while importing a_py: The specified module could not be found.

这个类只有两个成员--来自PCL库的类型。

class A
{
   pcl::NormalEstimation< pcl::PointXYZ, pcl::Normal> normalEstimation_;
   pcl::PointCloud<pcl::Normal>::Ptr normals_;
};

如果我删除 第一 成员,我可以成功地从DLL中导入模块。

这是pybind11的代码。

namespace py = pybind11;

PYBIND11_MODULE(a_py, m)
{
   py::class_<A>(m, "A");
}

使用CMake找到PCL。find_package(PCL REQUIRED)

这种情况在Windows和Linux的最新PCL(1.10)和旧版本上都会发生。

(添加 #define PCL_NO_PRECOMPILE 前的#includes无济于事)。)

更新了。我打开了 GitHUb问题 关于这个问题,因为这看起来像是一个虚假的内部运行时依赖。

答案

"The specified module could not be found"(找不到指定的模块)这个错误在Windows上有点误导,因为这意味着你试图加载的DLL或者它的任何依赖关系都无法找到。

Windows会按照这里描述的顺序和路径搜索DLL。https:/docs.microsoft.comen-uswindowswin32dllsdynamic-link-library-search-order 但通常你必须确保你所依赖的DLLs与你所加载的DLL在同一个文件夹中。

试着用这个工具打开你的DLL(一个更现代的DependencyWalker版本)。https:/github.comlucasgDependencies)。 并查找找不到的DLLs。

以上是关于导入错误。pybind11和PCL加载DLL失败。的主要内容,如果未能解决你的问题,请参考以下文章

Pyqt5 已安装,但在导入时出现 dll 加载失败错误?

ImportError:导入 _remap 时 DLL 加载失败

出现错误:DLL 加载失败:操作系统无法运行 %1 - Python 2.7;报废模块;导入密码学

导入 cv2 (opencv) 时出现“DLL 加载失败”

windows server 2016 中导入 tensorflow 错误(DLL 加载失败导入 _pywrap_tensorflow_internal)

无法导入numpy,DLL加载失败:找不到指定的模块