java使用swig调用链接库

来源:互联网 发布:springboot改端口 编辑:程序博客网 时间:2024/04/29 23:17
java使用swig调用链接库
1、i文件编辑,直接将头文件包含进来即可
/* File : xxx.i */  
%module xxx  
%{  
#include "test.h"
%}
%include "test.h"


2、生成cxx文件。如果链接库是c的,-c++可以省略。
swig -c++ -java -package com.test -outdir ./ -I../include xxx.i


3、编译cxx文件
windows的建议采用vc编译,linux采用codeblocks。


4、vc编译如下:
1)、在vc6中建立新的dll工程,建立一个空白的cpp文件,将swig生成的cxx文件内容拷贝进去;
2)、把依赖的头文件拷贝到工程根目录,也就是和上面cpp一个位置;
3)、jni.h和jni_md.h是项目依赖的,需要将它们拷贝到vc6的VC98\Include文件夹;
4)、在根目录下建立一个文件夹,将需要依赖的lib文件放进去,然后在工程--设置--连接选项卡中的“对象/库模块”中加入
lib/xxx.lib,每加一个都有空格;
5)、至此就可以调试了,调试过程中发现的代码错误可以修改;
6)、在菜单栏空白处右键选组件,出现的新工具可以切换debug和release方式。


5、codeblocks编译问题。
1)、解决code::blocks 不能编译问题:
Go to the left panel that says projects, and right-click on .cpp file. Select properties, then go to build. Check the boxes under the heading Belongs in Targets: "Debug" and "Release"
2)、不让编译时输出“dereferencing type-punned pointer will break strict-aliasing rules”方法
凡gcc/g++地方 都改 
gcc -Wno-strict-aliasing
g++ -Wno-strict-aliasing


6、swig参数说明: 
1)-c++ -java 
   告诉swig将C++接口转换为java接口。如果是将C接口转换为java接口,就不需要-c++,直接写 swig -java就可以。 
2)-package 
   生成的java类的包的名称 
3) -I 
   xxx.i中include的.h文件的路径 
4)xxx.i 
   swig的.i文件 
  执行这条命令后,将在swig路径下生成几个文件 
1)test_wrap.cxx 
   C++文件,包装器文件。它将C++类的方法转换为C的函数。 
2)test.java 
   这是与刚才定义的module同名的一个类。 
3)testJNI.java 
   打开这个文件可以看到,C++类的方法都转化为Java的静态方法。 
4)其他与C++类同名的Java类 
   每一个C++类都被转化为与之对应的Java类,并且类名,方法明完全一样。 

0 0