swig可以自己包装c代码给其他语言使用,对应java就是包装为jni,这里简单描述各平台使用方法
git clone https://github.com/swig/swig.git
cd swig/
./autogen.sh
./configure --without-pcre
make
编译成功后,测试一下example
cd Examples/java
cd simple/
make
java -Djava.library.path=./ runme
The gcd of 42 and 105 is 21
Foo = 3.0
Foo = 3.1415926
https://sourceforge.net/projects/swig/
设置环境变量: JAVA_INCLUDE = %JAVA_HOME%\include JAVA_BIN = %JAVA_HOME%\bin 添加路径: D:\download\swigwin-3.0.12
对于目录中有example.dsp文件的,我们可以直接用vc2015打开,并且新建64位平台编译,设置项目属性中c++-->常规—>调试信息格式—>选择“程序数据库(/Zi)”或“无” 然后直接编译就可以可以得到example.dll 如果没有,就需要按下面的步骤操作:
cd D:\download\swigwin-3.0.12\Examples\java\callback
swig -c++ -java example.i
打开vs2015新建Win32 Console Application工程,选择空项目,Application type选择DLL 将example.cxx,example_wrap.cxx添加到源文件 设置工程属性,选择平台x64,在属性页/配置属性/vc++目录中添加包含目录 C:\Program Files\Java\jdk1.8.0_101\include C:\Program Files\Java\jdk1.8.0_101\include\win32 编译生成dll文件,把dll复制到D:\download\swigwin-3.0.12\Examples\java\callback目录,并改名为example.dll
javac runme.java
java -Djava.library.path=./ runme
Adding and calling a normal C++ callback
----------------------------------------
Callback::run()
Callback::~Callback()
Adding and calling a Java callback
------------------------------------
JavaCallback.run()
Callback::~Callback()
java exit
swig -java -c++ example.i
g++ -Wall -Wl,--kill-at -I "%JAVA_HOME%/include" -I "%JAVA_HOME%/include/win32" -shared -s -o example.dll *.cxx
javac -d . *.java
java -cp . runme
结果显示
Adding and calling a normal C++ callback
----------------------------------------
Callback::run()
Callback::~Callback()
Adding and calling a Java callback
------------------------------------
JavaCallback.run()
Callback::~Callback()
java exit