centos swig 编译c,python调用

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/47259413 未经博主允许不得转载。

1,关于swig

SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。
最新的版本已经开始支持golang了。

2,官方例子

首先安装swig,官网网站最新的是3.0.6版本。
可以使用 yum install swig (这个安装的是2.0.10版本)
下载源代码直接安装最新。
http://www.swig.org/download.html

tar -zxvf swig-3.0.6.tar.gz
cd swig-3.0.6
./configure
make
make install
#python 需要安装开发包
yum install python-devel

http://www.swig.org/translations/chinese/tutorial.html
首先创建example.i 接口文件:

 /* example.i */
 %module example
 %{
 /* Put header files here or function declarations like below */
 extern double My_variable;
 extern int fact(int n);
 extern int my_mod(int x, int y);
 extern char *get_time();
 %}

 extern double My_variable;
 extern int fact(int n);
 extern int my_mod(int x, int y);
 extern char *get_time();

编写接口的实现文件example.c:

/* File : example.c */

 #include <time.h>
 double My_variable = 3.0;

 int fact(int n) {
     if (n <= 1) return 1;
     else return n*fact(n-1);
 }

 int my_mod(int x, int y) {
     return (x%y);
 }

 char *get_time()
 {
     time_t ltime;
     time(&ltime);
     return ctime(&ltime);
 }

编译python模块:

#编译python模块,会生成一个
swig -python example.i
编译c文件,和wrap文件,使用python库编译
gcc -c -fPIC example.c example_wrap.c -I/usr/include/python2.7
#生成共享库
ld -shared example.o example_wrap.o -o _example.so 

测试python模块:

>>> import example
>>> example.fact(5)
120
>>> example.my_mod(10,30)
10
>>> example.get_time()
'Mon Aug  3 05:25:35 2015\n'
>>> example.get_time()
'Mon Aug  3 05:25:37 2015\n'
>>> example.get_time()
'Mon Aug  3 05:25:38 2015\n'

3,总结

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/47259413 未经博主允许不得转载。

swig 非常方便的实现了python的模块扩展,可以将现有的c,c++库封装成模块提供给python调用。

时间: 2024-09-30 04:03:03

centos swig 编译c,python调用的相关文章

《GDAL源码剖析与开发指南》一一1.7 SWIG编译

1.7 SWIG编译 GDAL源码剖析与开发指南1.7.1 SWIG简介 SWIG全称是Simplified Wrapper and Interface Generator,官方网站是http://www.swig.org/.SWIG是一个开发工具,能够将使用C或者C++编写的软件与其他各种高级编程语言进行嵌入联接.SWIG能应用于各种不同类型的语言,包括常用脚本编译语言例如Perl.PHP.Python.Tcl.Ruby.PHP等,也包括非脚本编译语言,如C#.Common Lisp (CLI

python 调用 lvs 脚本 [备忘]

软件环境 操作系统 CentOS 运行环境:python 2.7 工具:/sbin/ipvsadm 参数说明 [root@gd02-zabbix-db-research python_api]# ./lvs.py usage: ./lvs.py --help or --example [root@gd02-zabbix-db-research python_api]# ./lvs.py --help usage: lvs.py [-h] [-A] [-D] [-F] [-L] [-t] [-u]

Python调用C模块以及性能分析

一.c,ctypes和python的数据类型的对应关系 ctypes type ctype Python type c_char char 1-character string c_wchar wchar_t 1-character unicode string c_byte char int/long c_ubyte unsigned char int/long c_short short int/long c_ushort unsigned short int/long c_int int

Python调用C/C++的种种方法

Python是解释性语言, 底层就是用c实现的, 所以用python调用C是很容易的, 下面就总结一下各种调用的方法, 给出例子, 所有例子都在ubuntu9.10, python2.6下试过. 1. Python 调用 C (base) 想在python中调用c函数, 如这儿的fact #include  int fact(int n) {   if (n <= 1)     return 1;   else     return n * fact(n - 1); } PyObject* wr

Python调用C/C++动态链接库的方法详解_python

本文以实例讲解了Python调用C/C++ DLL动态链接库的方法,具体示例如下: 示例一: 首先,在创建一个DLL工程(本例创建环境为VS 2005),头文件: //hello.h #ifdef EXPORT_HELLO_DLL #define HELLO_API __declspec(dllexport) #else #define HELLO_API __declspec(dllimport) #endif extern "C" { HELLO_API int IntAdd(in

python调用机器喇叭发出蜂鸣声(Beep)的方法

 这篇文章主要介绍了python调用机器喇叭发出蜂鸣声(Beep)的方法,实例分析了Python调用winsound模块的使用技巧,需要的朋友可以参考下     本文实例讲述了python调用机器喇叭发出蜂鸣声(Beep)的方法.分享给大家供大家参考.具体分析如下: 下面这段python代码可调用机器喇叭发出蜂鸣声(Beep),当然你的喇叭必须能响,否则可能会报错的. ? 1 2 3 import winsound winsound.Beep(600,1000) #其中600表示声音大小,100

Python调用命令行进度条的方法

  本文实例讲述了Python调用命令行进度条的方法.分享给大家供大家参考.具体分析如下: 关键点是输出'r'这个字符可以使光标回到一行的开头,这时输出其它内容就会将原内容覆盖. ? 1 2 3 4 5 6 7 8 9 10 11 import time import sys def progress_test(): bar_length=20 for percent in xrange(0, 100): hashes = '#' * int(percent/100.0 * bar_length

python调用java模块SmartXLS和jpype修改excel文件的方法

  这篇文章主要介绍了python调用java模块SmartXLS和jpype修改excel文件的方法,涉及Python调用java模块的相关技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了python调用java模块SmartXLS和jpype修改excel文件的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # -*- coding: utf8 -*- """ 使用java的模块Sma

centos下编译安装PostgreSQL数据库的教程

 PostgreSQL是开源关系型数据库的首选了,因为现在mysql数据库都给oracle收购了,下面我们来介绍在centos中编译PostgreSQL数据库的教程.   readline是一个开源的跨平台程序库,提供了交互式的文本编辑功能.postgresql需要readline的支持. wget -c https://ftp.postgresql.org/pub/source/v9.3.5/postgresql-9.3.5.tar.gz [root@rootop postgresql-9.3