在软件开发中,我们经常需要将高性能的 C/C++ 代码与灵活易用的 Python 结合起来。这时,SWIG(Simplified Wrapper and Interface Generator)就派上用场了!本教程将手把手教你如何使用 SWIG 在 Python 中调用 C++ 代码,即使你是编程小白也能轻松上手。

SWIG 是一个开源工具,能够自动将 C/C++ 编写的函数、类和变量“包装”成其他高级语言(如 Python、Java、Ruby 等)可以调用的形式。对于 Python SWIG教程 来说,它的核心作用就是生成能让 Python 直接 import 并使用的模块。
在开始之前,请确保你已安装以下工具:
在 macOS 上可用 Homebrew 安装:
brew install swig在 Ubuntu/Debian 上:
sudo apt-get install swigWindows 用户可从 SWIG 官网 下载安装包。
我们先创建一个简单的 C++ 函数文件 example.cpp:
// example.cpp#include <iostream>// 一个简单的加法函数int add(int a, int b) { return a + b;}// 打印消息的函数void greet(const char* name) { std::cout << "Hello, " << name << "!" << std::endl;}同时创建对应的头文件 example.h(虽然不是必须,但推荐):
// example.hint add(int a, int b);void greet(const char* name);SWIG 需要一个 .i 后缀的接口文件来知道哪些 C++ 内容需要暴露给 Python。创建 example.i:
%module example%{#include "example.h"%}// 声明要导出的函数extern int add(int a, int b);extern void greet(const char* name);解释一下:
%module example:告诉 SWIG 生成的 Python 模块名为 example%{ ... %}:这部分会被原样复制到生成的 C++ 包装代码中,用于包含头文件extern ...:声明要包装的函数在终端中运行以下命令:
# 1. 使用 SWIG 生成包装代码swig -python -c++ example.i# 2. 编译 C++ 源码和 SWIG 生成的包装文件# Linux/macOS:g++ -fPIC -shared example.cpp example_wrap.cxx \ -I/usr/include/python3.x -o _example.so# Windows (使用 MSVC):cl /LD example.cpp example_wrap.cxx \ -I"C:\Python3x\include" \ -L"C:\Python3x\libs" /link /OUT:_example.pyd注意:请将
python3.x替换为你实际的 Python 版本,例如python3.9。可通过python3 -c "import sys; print(sysconfig.get_path('include'))"查看 include 路径。
现在,你可以在 Python 中直接导入并使用 C++ 函数了!
# test.pyimport example# 调用 C++ 的 add 函数result = example.add(3, 5)print("3 + 5 =", result) # 输出: 3 + 5 = 8# 调用 greet 函数example.greet("Alice") # 输出: Hello, Alice!运行 python test.py,你会看到输出结果!恭喜你,成功完成了 SWIG使用指南 的第一个例子。
_example.so(或 .pyd)和 example.py(SWIG 自动生成)在同一目录下。.i 文件中声明类即可,SWIG 会自动生成 Python 类。通过本 SWIG接口生成 教程,你已经掌握了如何使用 SWIG 将 C++ 代码无缝集成到 Python 项目中。无论是加速计算密集型任务,还是复用现有 C++ 库,SWIG 都是一个强大而高效的工具。
赶快动手试试吧!你可以尝试封装更复杂的 C++ 类、处理 STL 容器,甚至结合 NumPy 进行科学计算。SWIG 的世界远不止于此!
本文由主机测评网于2025-12-19发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025129881.html