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
- JAVA使用JNI调用C/C++动态库
- JAVA使用JNI调用C/C++动态库
- JNI 使用java调用c++动态库
- linux下 java JNI调用C语言动态链接库(非常使用!!非常经典!!)
- Java使用JNI调用C/C++的DLL动态链接库1
- Java使用JNI调用C/C++的DLL动态链接库2
- 【JNI调用DLL动态库】Java使用JNI调用DLL动态链接库学习记录
- linux下 java JNI调用C语言动态链接库
- linux下 java JNI调用C语言动态链接库
- Java调用C/C++编写的动态连接库-JNI
- linux下 java JNI调用C语言动态链接库
- java 调用C/C++ JNI 动态链接库
- java(JNI)调用c/c++动态链接库 linux
- java借助于JNI调用c/c++动态链接库
- 【转载整理】eclipse 开发c/c++、Java使用JNI调用C程序、生成64位dll动态链接库
- 浅谈JNI的使用-java调用动态链接库
- java使用JNI调用DLL动态库错误
- Java/JSP使用JNI技术调用本地动态链接库
- OS高级开发~Runtime(四)
- CodeForces 626C Block Towers(二分)
- 剑指offer之面试题30最小的k个数
- SpringMVC中可以运用多个HandlerMapping
- latex中使用bm包加粗公式中的字母
- JNI 使用java调用c++动态库
- STL list,vector,deque区别
- Cordova webapp实战开发:(7)如何通过简单的方法做到,不重新发布APP来修复bug、增加功能、或者躲开苹果的一些严格审核?
- 第一个Windows应用程序--启动函数、入口点函数与退出函数
- cmder替换Windows自带的cmd
- Mybatis SqlSessionTemplate 源码解析
- HYSBZ 1095Hide 捉迷藏
- 各类算法的优缺点
- POM.xml红叉解决方法