最近一直在用C/C++做开发,虽然C/C++都有自己的单元测试框架(CUnit,CPPUnit,知道还有其它框架的兄弟告诉我一声,我去看看),但是总觉得写起来麻烦(人懒没办法),于是萌发了寻找更简便方法的念头。
听说Python, Perl, Tcl都可以调用C的动态链接库,但必须把它们做成这些脚本语言的扩展模块,这样一来,复杂度又变高了,工作量也大。
后来花了一个下午的时间在往上找,终于在一个论坛上发现一个叫SWIG的东西,它将C代码做成各种脚本语言的扩展模块(Python,Perl,Tcl等)。SWIG本质上是一个编译器,它可以通过C/C++的头文件或者一个特殊的接口文件来生成一个以_wrap.c为后缀的包装文件,例如你的C模块叫 test.c, 那么SWIG会为你生成一个test_wrap.c文件,然后将这两个文件编译成一个动态链接库,就能使用其它的脚本语言来调用。下面是个简单的例子
tt.h
#ifdef _WIN32
int __declspec(dllexport)getvalue();
#else
int getvalue();
#endif
tt.c
#include "tt.h"
int getvalue()
{
return 100;
}
下面使用swig和gcc来生成Python模块
环境:mingw32 + msys
swig -python -module tt tt.h
gcc -c tt.c tt_wrap.c -I/usr/local/python25/include
gcc -shared tt.o tt_wrap.o -o tt.dll -L/usr/local/python25/libs -lpython25
tt_test_win.py:
from ctypes import *
tt = CDLL("tt.dll")
print tt.getvalue()
环境:debian
swig -python -module tt tt.h
gcc -c tt.c tt_wrap.c -I/usr/local/include/python2.5
gcc -shared tt.o tt_wrap.o -o tt.so -L/usr/local/lib/python2.5 -lpython2.5
tt_test_linux.py:
from ctypes import *
tt = CDLL("./tt.so")
print tt.getvalue()
在以上两个不同的环境下除了一些include和lib的路径不同以及动态连接库的扩展名不同外,代码基本都差不多。这样swig就将从C映射到Python等脚本语言的工作完成了,我接下来所做的就是使用Python来测试我用C所写的程序。我想这样应该可以大大减少我写测试代码的时间了。
分享到:
相关推荐
SWIG的主要功能是生成一个 wrapper(封装器),将C/C++代码暴露给脚本语言,以便在脚本语言中使用C/C++代码。 SWIG的优点 * 跨语言调用:SWIG使得C/C++代码可以在脚本语言中被调用,实现了跨语言的调用。 * 高效率...
本文探讨了一种结合Python和C/C++的分布式计算架构,该架构主要利用了SWIG技术和RPYC,旨在解决数据高效传递、混合Python和C/C++代码以及数据同步问题,从而达到高效率和易用性的目标。 首先,文章介绍了Python语言...
通过使用 SWIG (Simplified Wrapper and Interface Generator) 等工具,可以在保持 Python 的灵活性、生产力和易于维护的同时,利用 C 或 C++ 的高性能部分。这种方法使得 Python 程序员可以在需要的地方调用 C 或 ...
本篇将详细介绍这两个示例`pyton_C`和`python_C++`所展示的Python调用C/C++的方法。 1. Python调用C:通过`ctypes`库 `ctypes`是Python的标准库之一,它允许我们直接调用C语言编写的动态链接库(.dll或.so文件)。...
对开发人员的一个常见要求是向脚本语言接口公开 C/C++ 代码,这正是 Simplified Wrapper and Interface Generator (SWIG) 的用武之地。SWIG 允许您向广泛的脚本语言公开 C/C++ 代码,包括 Ruby、Perl、Tcl 和 Python...
SWIG是一个工具,它可以自动生成C++和Python之间的绑定代码,使C++库可以无缝地在Python环境中使用。SWIG不仅支持C++,还支持许多其他语言,如Java、Perl、Ruby等。通过SWIG,开发者可以将现有的C++代码快速地包装成...
2. **SWIG(Simplified Wrapper and Interface Generator)**:SWIG是一个工具,可以自动生成Python接口代码,使得Python可以调用C/C++的函数和类。用户只需要为C/C++代码创建一个接口文件,SWIG会自动生成Python...
SWIG普遍应用于创建高级语言解析或汇编程序环境,用户接口,作为一种用来测试C/C++或进行原型设计的工具。SWIG还能够导出XML或Lisp s-expressions格式的解析树。SWIG可以被自由使用,发布,修改用于商业或非商业中。
- **运行SWIG生成接口代码**:使用SWIG工具对.i文件进行处理,生成Python所需的.c或.cpp文件以及Python模块的头文件。 - **编译C/C++代码**:将生成的.c或.cpp文件与原始的C/C++驱动一起编译成动态链接库(.dll或....
SWIG是一个工具,它可以自动生成Python和其他语言的接口代码,使得C/C++代码可以被Python调用。你需要编写一个SWIG接口文件,指定哪些C/C++函数或类需要暴露给Python。之后,SWIG会生成Python模块,你可以直接在...
swig 打包C/C++程序;供python调用。 本软件操作平台windows 10 Vs2017;python3.8; 主要讲述swig vs配置,测试用例。 主要包含常量,变量,指针,结构体定义及运用。
本文将通过一系列小型C++示例来探讨SWIG如何支持C++的高级特性,例如模板和异常处理,并介绍如何使用SWIG创建Python绑定。 #### SWIG概述 SWIG最初是由David Beazley开发的,旨在简化C/C++代码与解释型语言之间的...
标题中的“swig”是指Software Interface Generator,它是一个开源工具,用于将C和C++代码与多种编程语言(如Java和C#)互操作。在本案例中,我们将探讨如何利用SWIG在Java和C#中调用由C++编写的动态链接库(DLL)。VS...
SWIG是一个工具,它允许C/C++代码与多种高级语言,如Python,进行交互。国密是一系列由我国制定的密码算法标准,包括SM2、SM3和SM4等,用于保障信息安全。 在描述中提到的“swig的学习”,是指学习如何使用SWIG来...
SIP 是另一个类似于 SWIG 的工具,专门用于 Python 调用 C/C++ 模块。与 SWIG 不同的是,SIP 专注于 Python 与 Qt 库的集成,但也适用于一般的 C/C++ 与 Python 绑定。 **注意事项**: - 需要安装 Python SIP 库;...
In a nutshell, SWIG is a compiler that takes C/C++ declarations and creates the wrappers needed to access those declarations from other languages including including Perl, Python, Tcl, Ruby, Guile, ...
在IT领域,跨语言编程是一种常见的需求,它允许我们利用不同语言...通过理解Python C API或使用SWIG,你可以构建高性能的Python应用,同时享受C++的底层控制。在实际项目中,这通常是提高程序性能和扩展性的有效策略。
例如,对于Python模块的构建,SWIG将生成C源文件和一个Python头文件,接着通过标准的Python模块构建过程将其编译为Python模块。 #### 三、SWIG支持的语言特性与非侵入式接口构建 SWIG不仅支持C/C++的基本语法,还...
4. Python与C/C++的结合:Python可以通过Cython、SWIG或Boost.Python等工具与C/C++进行互操作,使得Python代码能够调用C/C++编写的高效库。这种方式在保持Python的易用性的同时,利用C/C++的高性能处理关键计算部分...