ImportError: DLL load failed with pybind11 and PCL
ImportError: DLL load failed with pybind11 and PCL
我正在使用 pybind11 为小型 C++ class 创建一个 Python 包装器 class。
导入 DLL 时出现以下错误(运行 python -v
以显示 Traceback):
>>> 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.
class 只有两个成员 - 来自 PCL 库的类型:
class A
{
pcl::NormalEstimation< pcl::PointXYZ, pcl::Normal> normalEstimation_;
pcl::PointCloud<pcl::Normal>::Ptr normals_;
};
如果删除 first 成员,我可以从 DLL 中成功导入模块。
这是 pybind11 代码:
namespace py = pybind11;
PYBIND11_MODULE(a_py, m)
{
py::class_<A>(m, "A");
}
PCL 使用 CMake 找到:find_package(PCL REQUIRED)
最新的 PCL (1.10) 和旧版本 Windows 和 Linux 都会发生这种情况。
(在#includes 之前添加 #define PCL_NO_PRECOMPILE
没有帮助。)
更新:
我打开了 a GitHUb issue 关于这个,因为这看起来像是一个虚假的内部运行时依赖。
错误“找不到指定的模块”在 Windows 上有点误导,因为它意味着无法找到您尝试加载的 DLL 或其任何依赖项。
Windows 按照此处描述的顺序和路径搜索 DLL:https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order 但通常您只需确保您依赖的 DLL 与您正在加载的 DLL 位于同一文件夹中.
尝试在此工具(更现代的 DependencyWalker 版本)中打开您的 DLL:https://github.com/lucasg/Dependencies 并查找无法找到的 DLL。
我正在使用 pybind11 为小型 C++ class 创建一个 Python 包装器 class。
导入 DLL 时出现以下错误(运行 python -v
以显示 Traceback):
>>> 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.
class 只有两个成员 - 来自 PCL 库的类型:
class A
{
pcl::NormalEstimation< pcl::PointXYZ, pcl::Normal> normalEstimation_;
pcl::PointCloud<pcl::Normal>::Ptr normals_;
};
如果删除 first 成员,我可以从 DLL 中成功导入模块。
这是 pybind11 代码:
namespace py = pybind11;
PYBIND11_MODULE(a_py, m)
{
py::class_<A>(m, "A");
}
PCL 使用 CMake 找到:find_package(PCL REQUIRED)
最新的 PCL (1.10) 和旧版本 Windows 和 Linux 都会发生这种情况。
(在#includes 之前添加 #define PCL_NO_PRECOMPILE
没有帮助。)
更新: 我打开了 a GitHUb issue 关于这个,因为这看起来像是一个虚假的内部运行时依赖。
错误“找不到指定的模块”在 Windows 上有点误导,因为它意味着无法找到您尝试加载的 DLL 或其任何依赖项。
Windows 按照此处描述的顺序和路径搜索 DLL:https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order 但通常您只需确保您依赖的 DLL 与您正在加载的 DLL 位于同一文件夹中.
尝试在此工具(更现代的 DependencyWalker 版本)中打开您的 DLL:https://github.com/lucasg/Dependencies 并查找无法找到的 DLL。