目录
3.命令行:cd到你的文件目录。clion直接在最下面打开。编辑
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