导入错误。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失败。的主要内容,如果未能解决你的问题,请参考以下文章
ImportError:导入 _remap 时 DLL 加载失败
出现错误:DLL 加载失败:操作系统无法运行 %1 - Python 2.7;报废模块;导入密码学
windows server 2016 中导入 tensorflow 错误(DLL 加载失败导入 _pywrap_tensorflow_internal)