pybind实现python调用c++函数,含cmakelist

目录

1.创建一个c++代码。比如:

 2.cmakelist编写:

 3.命令行:cd到你的文件目录。clion直接在最下面打开。​编辑

4.调用函数/类


1.创建一个c++代码。比如:

//调用函数
#include <pybind11/pybind11.h>

int add( int i, int j ){
    return i+j;
}

PYBIND11_MODULE( py2cpp, m ){
    m.doc() = "pybind11 example";
    m.def("add", &add, "add two number" );
}
//调用类
#include <pybind11/pybind11.h>

class Hello
{
public:
    Hello(){}
    void say( const std::string s ){
        std::cout << s << std::endl;
    }
};

PYBIND11_MODULE( py2cpp, m ){
    m.doc() = "pybind11 example";

    pybind11::class_<Hello>(m, "Hello" )
        .def(pybind11::init())
        .def( "say", &Hello::say );
}
//调用命名空间
#include <pybind11/pybind11.h>

namespace NS{
class World{
public:
    World(){}
    void say( const std::string s ){
        std::cout << s << std::endl;
    }
};

PYBIND11_MODULE( py2cpp, m ){
    m.doc() = "pybind11 example";
    pybind11::class_<NS::World>(m, "World")
        .def(pybind11::init())
        .def("say", &NS::World::say);
}

 2.cmakelist编写:

cmake_minimum_required(VERSION 3.22)
project(project)
set(CMAKE_CXX_STANDARD 14)
add_subdirectory(thirdparty/pybind11)
include_directories(thirdparty/eigen)
pybind11_add_module(py2cpp SHARED main.cpp)


#如果含有其他头文件,加入别忘了;其他调用的文件需要加入,以及被调用的库。
#pybind11_add_module(myaes SHARED
#        main.cpp
#        aescbs/aes.cpp)
#include_directories(/usr/local/openssl/include)
#link_directories(/usr/local/openssl/lib)
#target_link_libraries(myaes PRIVATE /usr/local/openssl/lib/libssl.a #/usr/local/openssl/lib/libcrypto.a)

 pybind11/eigen两个库复制到文件下面,我习惯创建一个thirdparty,复制到里面,链接在最后。

 3.命令行:cd到你的文件目录。clion直接在最下面打开。

 为了方便可以创建一个build文件夹,再编译。

mkdir build
cmake ..
make

 打开python3,切记至少3.8以上。看.so前面的38。

4.调用函数/类

打开python3,import XXX,如果函数直接调用就好,如果是类需要初始化。

import py2cpp
abc = py2cPP.Hello()
a = abc.say("hi!")

--------------------
hi!

GitHub - pybind/pybind11: Seamless operability between C++11 and Python

Eigen

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值