JNI 使用java调用c++动态库

来源:互联网 发布:amd显卡游戏优化 编辑:程序博客网 时间:2024/06/06 01:43

1.   使用eclipse开发工程新建一个javaproject项目

2.   把SplitImage.java类文件直接复制进src目录下。

其中包名为com.touchspring.captcha

3.   生成.h头文件

使用命令行工具进入到src目录下执行javah com.touchsprig.captcha.SplitImage

会生成如com_touchspring_captcha_SplitImage.h文件。

4.   新建c++工程。并实现该头文件的函数即可,编译通过后,会生成的动态库(dll,so,jnilib等)。

在压缩包中的SplitImage.cpp是样例代码。

在不同平台会有不同的编译环境。在windows平台直接可以使用微软visual studio 开发工具,如果在编译的过程中找不到jni.h,jni_md.h请把jdk下的头文件,包含到include配置项中。

如果是linux或者mac os可以直接命令行使用gcc即可。

mac os 环境下的编译命令:

1)     gcc -I/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/include-I//Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home/include/darwin/ -c SplitImage.cpp

2)     gcc -dynamiclib -o libsplitImage.jnilib SplitImage.o


package com.touchspring.captcha;public class SplitImage {/** * @param imagePath  * @param originalImageName * @param telNumberType  * @return  返回分隔后的图片文件名称数组 */public native String[] splitImage(String imagePath,String originalImageName,int telNumberType);static{//注:编译好的动态库命名规则为libsplitImage.dll,libsplitImage.so,libsplitImage.jnilib。分别是windows,linux,mac os系统的方式。System.loadLibrary("splitImage");}public static void main(String[] args) {SplitImage splitImage = new SplitImage();String results[] = splitImage.splitImage("", "", 1);for (int i = 0; i < results.length; i++) {System.out.println(results[i]);}System.out.println(results.length);}}

C++实现

#include "com_touchspring_captcha_SplitImage.h"//com_touchspring_captcha_SplitImageJNIEXPORT jobjectArray JNICALL Java_com_touchspring_captcha_SplitImage_splitImage  (JNIEnv *env, jobject obj, jstring imagePath, jstring originalImageName, jint telNumberType)  {  jobjectArray array;  jstring str;  char * resultArray[] = {"hello","world","jni","is","fun"};  int len = 5;  int i = 0;  array = (jobjectArray)(env->NewObjectArray(len,env->FindClass("java/lang/String"),0));  for(i = 0;i< len;i++){  str = (env)->NewStringUTF(resultArray[i]);  (env)->SetObjectArrayElement(array, i, str);   }   return array;  }





0 0
原创粉丝点击