`
qwjcool
  • 浏览: 68957 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用SWIG和Python对C/C++进行单元测试(一)

阅读更多

最近一直在用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工具,C/C++到python, tcl 的接口

    SWIG的主要功能是生成一个 wrapper(封装器),将C/C++代码暴露给脚本语言,以便在脚本语言中使用C/C++代码。 SWIG的优点 * 跨语言调用:SWIG使得C/C++代码可以在脚本语言中被调用,实现了跨语言的调用。 * 高效率...

    基于Python和C_C++的分布式计算架构.pdf

    本文探讨了一种结合Python和C/C++的分布式计算架构,该架构主要利用了SWIG技术和RPYC,旨在解决数据高效传递、混合Python和C/C++代码以及数据同步问题,从而达到高效率和易用性的目标。 首先,文章介绍了Python语言...

    Python C++ and SWIG

    通过使用 SWIG (Simplified Wrapper and Interface Generator) 等工具,可以在保持 Python 的灵活性、生产力和易于维护的同时,利用 C 或 C++ 的高性能部分。这种方法使得 Python 程序员可以在需要的地方调用 C 或 ...

    python调用C/C++ demo

    本篇将详细介绍这两个示例`pyton_C`和`python_C++`所展示的Python调用C/C++的方法。 1. Python调用C:通过`ctypes`库 `ctypes`是Python的标准库之一,它允许我们直接调用C语言编写的动态链接库(.dll或.so文件)。...

    SWIG 公开 C/C++ 代码,包括 Ruby、Perl、Tcl、C# 和 Python

    对开发人员的一个常见要求是向脚本语言接口公开 C/C++ 代码,这正是 Simplified Wrapper and Interface Generator (SWIG) 的用武之地。SWIG 允许您向广泛的脚本语言公开 C/C++ 代码,包括 Ruby、Perl、Tcl 和 Python...

    python加载自己写的c/c++程序

    2. **SWIG(Simplified Wrapper and Interface Generator)**:SWIG是一个工具,可以自动生成Python接口代码,使得Python可以调用C/C++的函数和类。用户只需要为C/C++代码创建一个接口文件,SWIG会自动生成Python...

    cmake_c++_python_swig

    SWIG是一个工具,它可以自动生成C++和Python之间的绑定代码,使C++库可以无缝地在Python环境中使用。SWIG不仅支持C++,还支持许多其他语言,如Java、Perl、Ruby等。通过SWIG,开发者可以将现有的C++代码快速地包装成...

    SWIG 源码(C/C++与其他语言的粘合剂)

    SWIG普遍应用于创建高级语言解析或汇编程序环境,用户接口,作为一种用来测试C/C++或进行原型设计的工具。SWIG还能够导出XML或Lisp s-expressions格式的解析树。SWIG可以被自由使用,发布,修改用于商业或非商业中。

    基于SWIG的Python仪器驱动封装技术.zip

    - **运行SWIG生成接口代码**:使用SWIG工具对.i文件进行处理,生成Python所需的.c或.cpp文件以及Python模块的头文件。 - **编译C/C++代码**:将生成的.c或.cpp文件与原始的C/C++驱动一起编译成动态链接库(.dll或....

    swig 打包C++ python应用

    swig 打包C/C++程序;供python调用。 本软件操作平台windows 10 Vs2017;python3.8; 主要讲述swig vs配置,测试用例。 主要包含常量,变量,指针,结构体定义及运用。

    linux 下 python调用c或者c++编写的代码使用案例

    SWIG是一个工具,它可以自动生成Python和其他语言的接口代码,使得C/C++代码可以被Python调用。你需要编写一个SWIG接口文件,指定哪些C/C++函数或类需要暴露给Python。之后,SWIG会生成Python模块,你可以直接在...

    using swig to bind c++ to python

    本文将通过一系列小型C++示例来探讨SWIG如何支持C++的高级特性,例如模板和异常处理,并介绍如何使用SWIG创建Python绑定。 #### SWIG概述 SWIG最初是由David Beazley开发的,旨在简化C/C++代码与解释型语言之间的...

    swig的学习以及国密的python封装.zip_python 国密_swig的学习以及国密的python封装_国密

    SWIG是一个工具,它允许C/C++代码与多种高级语言,如Python,进行交互。国密是一系列由我国制定的密码算法标准,包括SM2、SM3和SM4等,用于保障信息安全。 在描述中提到的“swig的学习”,是指学习如何使用SWIG来...

    SWIG 2.0.11 C/C++接入各种不同语言的接口程序

    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, ...

    swig使用手册

    例如,对于Python模块的构建,SWIG将生成C源文件和一个Python头文件,接着通过标准的Python模块构建过程将其编译为Python模块。 #### 三、SWIG支持的语言特性与非侵入式接口构建 SWIG不仅支持C/C++的基本语法,还...

    基于Python和C_C++的分布式计算架构.zip

    4. Python与C/C++的结合:Python可以通过Cython、SWIG或Boost.Python等工具与C/C++进行互操作,使得Python代码能够调用C/C++编写的高效库。这种方式在保持Python的易用性的同时,利用C/C++的高性能处理关键计算部分...

    从C++导出类到Python

    在IT领域,跨语言编程是一种常见的需求,它允许我们利用不同语言...通过理解Python C API或使用SWIG,你可以构建高性能的Python应用,同时享受C++的底层控制。在实际项目中,这通常是提高程序性能和扩展性的有效策略。

    SWIG Specification

    SWIG(Simplified Wrapper and Interface Generator)是一种软件开发工具,其主要功能是简化将不同编程语言接口到C和C++程序的任务。SWIG能够在不需要修改现有代码的基础上,自动创建其他编程语言(如Perl、Python、...

Global site tag (gtag.js) - Google Analytics