我正在尝试使用pybind11编译一个非常简单的示例,但与我能找到的所有教程不同,我不想将pybind11回购复制到我的项目中。我现在有
CMakeLists.txt
cmake_minimum_required(VERSION 3.22)
project(relativity)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED YES)
find_package(pybind11)
file(GLOB SOURCES "*.cpp")
pybind11_add_module(${PROJECT_NAME} ${SOURCES})main.cpp
#include <pybind11/pybind11.h>
namespace py = pybind11;
int add(int i, int j) {
return i + j;
}
PYBIND11_MODULE(example, m) {
m.doc() = "pybind11 example plugin"; // optional module docstring
m.def("add", &add, "A function that adds two numbers");
}当我运行cmake ..和make时,我没有发现任何错误,并且构建了relativity.so文件。但是,如果我试图使用import relativity在python中导入它,我会得到:
ImportError: dynamic module does not define module export function (PyInit_relativity)
我到底做错了什么?我真的找不到这样做的任何详细的例子或教程。
编辑:我尝试将pybind11回购克隆到我的项目中,并使用以下CMakeLists.txt
cmake_minimum_required(VERSION 3.22)
project(relativity)
add_subdirectory(pybind11)
pybind11_add_module(${PROJECT_NAME} main.cpp)但是,在导入python3时,这也会产生同样的错误。
发布于 2022-07-06 08:59:22
传递给PYBIND11_MODULE宏的第一个参数应该是模块的名称(因此应该匹配cmake文件中定义的"PROJECT_NAME“变量的内容):
PYBIND11_MODULE(relativity, m) { // <---- "relativity" instead of "example"
m.doc() = "pybind11 example plugin"; // optional module docstring
m.def("add", &add, "A function that adds two numbers");
}https://stackoverflow.com/questions/72871723
复制相似问题