首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pybind11非常简单的示例:导入python时的importError

pybind11非常简单的示例:导入python时的importError
EN

Stack Overflow用户
提问于 2022-07-05 15:09:18
回答 1查看 62关注 0票数 0

我正在尝试使用pybind11编译一个非常简单的示例,但与我能找到的所有教程不同,我不想将pybind11回购复制到我的项目中。我现在有

CMakeLists.txt

代码语言:javascript
复制
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

代码语言:javascript
复制
#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

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.22)

project(relativity)

add_subdirectory(pybind11)

pybind11_add_module(${PROJECT_NAME} main.cpp)

但是,在导入python3时,这也会产生同样的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-06 08:59:22

传递给PYBIND11_MODULE宏的第一个参数应该是模块的名称(因此应该匹配cmake文件中定义的"PROJECT_NAME“变量的内容):

代码语言:javascript
复制
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");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72871723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档