Ubuntu下C++如何与Python交互

77
2025/4/16 9:32:35
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在Ubuntu下,C++和Python可以通过多种方式交互。以下是一些常见的方法:

  1. 使用Python C API: Python提供了一个C API,允许C/C++代码直接调用Python代码或者创建Python对象。这种方法需要编写一些C/C++代码来封装Python功能,并且需要处理Python的GIL(全局解释器锁)。

  2. 使用Cython: Cython是一种编程语言,它结合了Python和C的特性,可以让你用类似Python的语法编写C扩展。Cython代码最终会被编译成C代码,然后可以很容易地与C++代码集成。

  3. 使用Boost.Python: Boost.Python是一个C++库,它提供了简洁的接口来暴露C++类和函数给Python。使用Boost.Python,你可以创建Python模块,然后在Python中像导入普通模块一样导入它们。

  4. 使用pybind11: pybind11是一个轻量级的头文件库,用于将C++代码暴露给Python。它旨在提供无缝、直观的语法来创建绑定,而不需要大量的样板代码。

  5. 使用外部工具: 你还可以使用外部工具如SWIG(Simplified Wrapper and Interface Generator)来自动生成C/C++到Python的绑定代码。

下面是一个简单的例子,展示如何使用pybind11在C++中创建一个函数,并在Python中调用它:

首先,你需要安装pybind11。可以通过以下命令安装:

git clone https://github.com/pybind/pybind11.git
cd pybind11/examples
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install

然后,创建一个C++文件,比如example.cpp

#include <pybind11/pybind11.h>

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 which adds two numbers");
}

接下来,使用CMake来编译这个模块:

cmake_minimum_required(VERSION 3.4)
pybind11_add_module(example example.cpp)

创建一个CMakeLists.txt文件,然后运行CMake和make来编译模块:

mkdir build && cd build
cmake ..
make -j$(nproc)

编译完成后,你会得到一个名为example的共享库(在Windows上是.pyd文件)。现在你可以在Python中使用这个模块了:

import example
print(example.add(1, 2))  # Output: 3

这些方法中的每一种都有其优缺点,你可以根据你的具体需求和偏好来选择最合适的方法。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: 如何优化Ubuntu Node.js日志存储空间