Swig编译C代码供java调用实例
来源:互联网 发布:php 执行git命令 编辑:程序博客网 时间:2024/06/06 03:40
SWIG是Simplified Wrapper and Interface Generator的缩写,其官方站点是http://www.swig.org/。SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言包括常用脚本编译语言例如Perl, PHP, Python, Tcl, Ruby and PHP。支持语言列表中也包括非脚本编译语言,例如C#, Common Lisp (CLISP, Allegro CL, CFFI, UFFI), Java, Modula-3, OCAML以及R,甚至是编译器或者汇编的计划应用(Guile, MzScheme, Chicken)。SWIG普遍应用于创建高级语言解析或汇编程序环境,用户接口,作为一种用来测试C/C++或进行原型设计的工具。SWIG还能够导出 XML或Lisp s-expressions格式的解析树。SWIG可以被自由使用,发布,修改用于商业或非商业中。
下面介绍一个实例实现c代码编译出.so库 并供java调用
第一步:安装swig,我的环境是ubuntu,有两种安装方式:
(1)sudo apt-get install swig; 如果不能下载可能是源有问题,要更新源
(2)源码安装,http://www.swig.org/download.html 在此处下载源码,我下载的版本是swig-3.0.5
安装流程:tar -xzvf swig-2.0.11.tar.gz
./configure --prefix=/home/mark/developer/swigtool // 指定安装目录
make // 编译
make install // 安装
(3)至此安装应该没问题,进入swig的安装目录下的bin文件夹执行 ./swig -version 检验swig安装是否成功,如果出现相关版本信息则安装成功。
第二步:写一段C代码:
<span style="font-size:14px;">/* 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(<ime); return ctime(<ime); }</span>
第三步:写接口文件
<span style="font-size:14px;"> /* 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(); </span>
第四步:写java代码
<span style="font-size:14px;">public class main { public static void main(String argv[]) { System.loadLibrary("example"); System.out.println(example.getMy_variable()); System.out.println(example.fact(5)); System.out.println(example.get_time()); } } </span>
第五步:编译:
命令如下:
swig -java example.i;//注意如果swig没有添加至path中,此命令要在swig执行目录下进行 ./swig -java /example.i所在地址/
locate jni.h 查找一下jni所需头文件的位置。 记住返回的结果,在编译是有用。
locate jni_md.h 同上;
gcc -fpic -c example.c example_wrap.c -I/usr/java/jdk1.6.0_21/include/ -I/usr/java/jdk1.6.0_21/include/linux/ 两个路径分别为前两个命令返回的路径
javac main.java 生成 .class文件
java -Djava.library.path=. main 指定运行参数
java main 执行 我的结果为:
3.0
120
Tue Jun 9 17:17:55 2015 为系统时间。
- Swig编译C代码供java调用实例
- java/android 使用swig编译c/c++ 代码类型转换
- centos swig 编译c,python调用
- 用Swig将c/c++程序转为java代码(使用swig实现java调用c、c++的方法)
- swig java使用实例
- SWIG封装C代码
- 通过SWIG封装C/C++代码被Python调用
- TensorFlow中的SWIG实现Python调用C/C++代码
- 利用Swig在python中调用C/C++代码
- android中用ndk编译c代码为so库,供jni调用(一)
- 使用swig包装C或C++源代码在windows下用命令行编译并用distutils打包供python使用
- Python调用C/C++(使用SWIG)
- 在Python中调用C++,使用SWIG
- python通过swig调用c程序举例
- 采用SWIG实现python调用C函数
- android 编译调用C代码
- Python 使用C代码——swig
- Swig:C/C++代码转Python
- IOS 将RGB颜色值转换为UIColor
- Spring HTTP Invoker 学习小记
- 7.1
- XSS进阶一
- 一网打尽,123个免费数字取证工具收藏列表
- Swig编译C代码供java调用实例
- java.net.SocketException: select failed
- 解决Myeclipse下Debug出现Source not found以及sql server中导入数据报错
- Spring中使用Hessian暴露服务
- 2012年"浪潮杯"山东省第三届ACM大学生程序设计竞赛--n a^o7 !
- 《深入理解Java虚拟机》学习小记一之自动内存管理机制(一)
- android 异步加载网络图片
- C++ union 和struct的使用
- Win7忘记密码如何破解