Я использую pybind11 для создания оболочки Python для небольшого класса C ++.
При импорте DLL появляется следующая ошибка (при запуске python -v
для отображения трассировки):
>>> 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_;
};
Если я удаляю first member, я могу успешно импортировать модуль из DLL.
Это код pybind11:
namespace py = pybind11;
PYBIND11_MODULE(a_py, m)
{
py::class_<A>(m, "A");
}
PCL найден с использованием CMake: find_package(PCL REQUIRED)
Это происходит как на Windows, так и на Linux с последней PCL (1.10) и более ранние версии тоже.
(Добавление #define PCL_NO_PRECOMPILE
до #includes не помогает.)
Обновление: Я открыл a GitHUb вопрос об этом, поскольку это похоже на ложную внутреннюю зависимость времени выполнения.