当前位置: 首页 > news >正文

利用SWIG实现JAVA调用C/C++代码

swig 是1个可以将C/C++包装成其它语言(比如:C#, java , python)接口的工具,直接下载即可使用。

下面演示如何用它来调用C代码

 

一、写一个C示例 example.c

/* File : example.c *//* 一个全局变量 */
double Foo = 3.0;/* 计算正整数的最大公约数 */
int gcd(int x, int y) {int g;g = y;while (x > 0) {g = x;x = y % x;y = g;}return g;
}

  

二、编写C的接口类 example.i

/* File : example.i */
%module example/* %{ %} 内的代码会原样拷贝到生成的C包装文件中 */
%{
/* 包含C头文件或声明需要包装的函数 */
extern int gcd(int x, int y);
extern double Foo;
%}/* 解析以下内容以生成Java接口 */
extern int gcd(int x, int y);
extern double Foo;

  

三、生成&编译

3.1 终端里输入:

swig -java example.i

执行成功后,你会看到目录下新生成了三个文件:

  • example_wrap.c:JNI包装代码。

  • example.java:Java层的模块类,提供了静态方法供我们调用。

  • exampleJNI.java:Java层的JNI接口类,定义了与C代码的底层映射。

 

3.2 生成.so(linux/unix平台)或.dll(windows平台)

以windows为例(使用MinGW):

gcc -shared example.c example_wrap.c \-I "C:/Program Files/Java/jdk1.8.0/include" \-I "C:/Program Files/Java/jdk1.8.0/include/win32" \-o example.dll

会生成example.dll文件

 

四、在java中调用 

// File: main.java
public class main {static {// 加载我们刚刚编译生成的动态链接库// Linux/macOS下加载 "example" (对应libexample.so)// Windows下加载 "example" (对应example.dll)System.loadLibrary("example");}public static void main(String[] args) {// 调用C函数,就像调用Java静态方法一样int x = 42;int y = 105;int g = example.gcd(x, y);System.out.println("The greatest common divisor of " + x + " and " + y + " is " + g);// 访问并修改C全局变量// SWIG为全局变量自动生成了getter/setterSystem.out.println("Original Foo = " + example.getFoo());example.setFoo(3.14159);System.out.println("New Foo = " + example.getFoo());}
}

编译java源文件到class文件

javac *.java

至此,目录下的文件清单如下:

  • example.c
  • example.class
  • example.dll
  • example.i
  • example.java
  • exampleJNI.class
  • exampleJNI.java
  • example_wrap.c
  • main.class
  • main.java

 

运行测试:

java.exe '-Djava.library.path=./' main

image

http://www.jsqmd.com/news/446371/

相关文章:

  • 如何高效使用线上回收平台?话费卡回收心得大公开 - 团团收购物卡回收
  • 新凯琳橡塑地板:融合材料优势,构建多场景适配地面系统 - 品牌之家
  • 山东一卡通回收平台有多少,一文全知晓 - 淘淘收小程序
  • 盘点2026年校考针对性训练培训机构课程完善的,纵横美术榜上有名 - 工业推荐榜
  • 2026年性价比高的教育科技公司盘点,圆梦未来(深圳)教育科技费用怎么收 - mypinpai
  • 不记名加油卡变现完整攻略,2026年回收零基础指南 - 淘淘收小程序
  • 数据集扩充
  • 市面上口碑好的京东e卡回收优质平台解析 - 淘淘收小程序
  • 2026年探寻校考针对性训练的特训团队成果多的靠谱品牌 - 工业推荐榜
  • 盘点2026年口碑好的矿用皮带机生产企业,山西唯和达名列前茅 - 工业品网
  • 2026锌镍合金螺丝生产厂家大评测,哪家更值得选?螺栓/螺丝/非标螺丝/螺母/紧固件/标准件/五金件,螺丝品牌推荐 - 品牌推荐师
  • 如何选择氧化镁厂家?市场供应情况参考,市面上氧化镁实力厂家口碑排行企业引领行业技术新高度 - 品牌推荐师
  • 2026年2月新鲜牛肉哪里买?这些供应店别错过,天祝白牦牛肉/鲜牛肉/白牦牛肉/牛肉/白牦牛,新鲜牛肉供应厂家推荐 - 品牌推荐师
  • 聊聊2026年内蒙古自动变速箱维修推荐厂家哪家口碑好 - 工业品牌热点
  • 盘点2026年杭州有名的代理记账品牌企业,哪家口碑好 - 工业设备
  • 启程国际旅行社价格透明吗,游北京选它靠谱吗 - myqiye
  • 网络传输的过程
  • 2026年绍兴口碑好的西点培训推荐,提供原材料服务很实用 - 工业品网
  • 2026年银座购物卡回收规则与要点,高效变现流程 - 淘淘收小程序
  • 2026回收攻略:永辉超市卡使用指南与回收流程 - 团团收购物卡回收
  • 吉林自动变速箱维修花费多少钱?求性价比高的品牌 - 工业品牌热点
  • 操作系统(1)
  • 新凯琳舞蹈地板:专注运动适配性,守护专业训练与表达空间 - 品牌之家
  • 装修设计不踩雷,西安这些公司的用户评价供你参考,家装/轻钢/油工/构造柱/现浇/天沟排水/土建,装修设计源头厂家怎么选 - 品牌推荐师
  • 2026可靠处理企业破产重整的律所,口碑好的品牌有哪些 - 工业品牌热点
  • 聊聊2026年昆明优质软装,优选软装创新能力与满意度双高 - myqiye
  • 如何写文章/专题
  • 解读微信立减金回收适合新手的高效操作平台 - 淘淘收小程序
  • 讲讲2026年杭州服务好的智能收款软件厂商,选哪家不踩坑 - myqiye
  • 上海人事外包服务商推荐 TOP 榜|专业选型攻略 - 包罗万闻