# SWIG **Repository Path**: geliang/SWIG ## Basic Information - **Project Name**: SWIG - **Description**: 使用SWIG接口(.i文件)生成 JAVA和C/C++交互的JNI代码 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 11 - **Forks**: 6 - **Created**: 2015-05-25 - **Last Updated**: 2025-07-02 ## Categories & Tags **Categories**: utils **Tags**: None ## README ###使用SWIG接口(.i文件)生成 JAVA和C/C++交互的JNI代码 SWIG是一套利用某些接口约定生成不同语言与C/C++语言之间相互调用代码的工具 比如JNI(c/c++与JAVA) --- 1. 本示例程序演示了将一个java BYTE数组 封装成结构体,并初入C/C++层进行控制台打印 java: ``` ko_byte_array_t array = new ko_byte_array_t(); final byte[] bytes = "geliang 发射点发立法手段来看 ".getBytes(); array.setSize(bytes.length); array.setBYTE(bytes); Unix.setuserids(array); ``` c: ``` typedef struct ko_byte_array_s{ ko_uint32_t size; char *BYTE; }ko_byte_array_t; extern void setuserids(ko_byte_array_t *array){ LOGI("array[%d]",array->size); char *s = (char*)malloc(array->size+1); memset(s, 0, array->size+1); memcpy(s, array->BYTE, array->size); int i =0; for (i = 0; i < array->size; ++i) { LOGI("char[%d]:%c",i,*((char*)(array->BYTE+i))); } LOGI("array char*: %s",array->BYTE); LOGI("array: %s",s); free(s); } ``` 代码生成的步骤: 1. 下载SWIG并安装配置环境变量 2. 到工程源代码所在目录执行swig -nopgcpp -java -package org.gl.demoswig.jni -outdir src/org/gl/demoswig/jni jni/Unix.i --- [引用] 官方示例:http://www.swig.org/Doc2.0/Java.html#Java_examples 传入和返回数组的映射:http://opensource.apple.com/source/swig/swig-10/Lib/java/various.i SWIG支持的语言 AllegroCL C# - Mono C# - MS .NET CFFI CHICKEN CLISP D Go language Guile Java Javascript - Node.js Javascript - V8 Javascript - WebKit Lua MzScheme/Racket Ocaml Octave Perl PHP Python R Ruby Scilab Tcl/Tk