导入使用cmake/mingw32make编译的pybind11模块时的导入错误

2024-09-29 23:32:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正试图将一个C++扩展写到Python,到目前为止只拥有一点点C++代码…只是为了测试工作流/编译

#include "conservation.h"
#include <pybind11/pybind11.h>

double calculateMomentum(double mass, double velocity) {
    return mass * velocity;
}

PYBIND11_MODULE(conservation, m) {
    m.doc() = "Conservation-quantity calculator";
    m.def("calculate_momentum", &calculateMomentum, "Returns Momentum of given parameters");
}

然后,我使用以下配置创建一个makefile:

cmake_minimum_required(VERSION 3.4...3.19)
project(Calculation LANGUAGES CXX)

set(pybind11_DIR $CACHE{pybind11_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../extensions)

find_package(pybind11 REQUIRED)
pybind11_add_module(conservation ./src/calculation/conservation.cpp)

之后,我可以在Windows和Linux上编译扩展而不出任何问题(分别使用mingw32 make和make)

当我尝试在Linux中导入它时,它不会出现任何问题,我可以运行calculate_momentum函数

但是,当我尝试在Windows计算机上导入扩展时,出现以下错误:

ImportError: DLL load failed while importing conservation: The parameter is incorrect.

我不是一个非常有经验的cmake或pybind11用户,所以完全有可能我做了一些完全错误的事情,任何输入都将非常感谢


Tags: cmakemakeincludelinuxwindowsdirmasspybind11

热门问题