导入错误。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。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

在Selenium中的单个窗口中改变不同页面之间的驱动焦点

2022-4-21 16:09:13

解决方案

如何从文件中提取String和Int,并将其放入2D Array中。

2022-4-21 16:09:15

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索