JNI实现Java调用C++程序(Linux 64位)
2017-09-03 10:19
881 查看
简介
使用Java通过JNI方式调用C++动态库文件gcc 4.8.5
centos7
jdk 1.8.0
生成C++头文件
写一个native方法,testString,作为Java程序中调用的函数,并生成C++头文件.JNIDemo.java:
public class JNIDemo { static{ System.load("/root/workspace/simple/libtest.so"); } public native String testString(String str); public static void main(String[] args) { // TODO Auto-generated method stub } }
在当前目录下,生成C++头文件:
javah -jni JNIDemo
生成了JNIDemo.h文件:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class JNIDemo */ #ifndef _Included_JNIDemo #define _Included_JNIDemo #ifdef __cplusplus extern "C" { #endif JNIEXPORT jstring JNICALL Java_JNIDemo_testString (JNIEnv *, jobject, jstring); #ifdef __cplusplus } #endif #endif
生成so文件
将jdk目录下jni.h, jni_md.h (jdk1.8.0_144/include/jni.h, jdk1.8.0_144/include/linux/jni_md.h)文件拷贝到当前目录下.JNIDemo.cpp:
#include "JNIDemo.h" #include "stdlib.h" JNIEXPORT jstring JNICALL Java_JNIDemo_testString (JNIEnv *env, jobject obj, jstring jstr1){ char* cha = (char*)env->GetStringUTFChars(jstr1, NULL); printf("In dll testString :%s\n", cha); sprintf(cha, "c++"); jstring ret = env->NewStringUTF(cha); env->ReleaseStringUTFChars(jstr1, cha); return ret; }
注意: JNIDemo.h中头文件修改为:
#include "jni.h"
g++命令生成so文件:
g++ -fpic -shared -o libtest.so JNIDemo.c
调用so文件
修改JNIDemo.java文件:public class JNIDemo { static{ System.load("/root/workspace/simple/libtest.so"); } public native String testString(String str); public static void main(String[] args) { JNIDemo j = new JNIDemo(); String user="javastr"; String enctypt=j.desEncode(user); System.out.println(enctypt); } }
命令行输入
javac JNIDemo.java java JNIDemo
输出结果
In dll testString :javastr c++
相关文章推荐
- linux下使用jni实现c++调用java程序(3)多线程jni使用
- linux下使用jni实现c++调用java程序(2)找不到java类的问题
- linux下使用jni实现c++调用java程序(5)参考资料总结
- JNI实现Java调用C++程序(Win10 64位)
- linux下使用jni实现c++调用java程序(1)准备工作
- linux下使用jni实现c++调用java程序(4)DestroyJavaVM出现错误
- 【转载整理】eclipse 开发c/c++、Java使用JNI调用C程序、生成64位dll动态链接库
- 【Java】Java调用C/C++程序的实现(jni)
- Android开发 通过JNI实现JAVA与C/C++程序间的调用和回调
- init.rc文件里面启动c++程序,通过jni调用java实现
- java程序调用C、C++动态库的几种实现方式,即JNI的应用方式
- 通过JNI实现Java和C++的相互调用(转)
- 使用JNI技术实现JAVA程序调用dll
- 通过JNI实现Java和C++的相互调用(转)
- 使用JNI技术实现JAVA程序调用dll
- 通过JNI实现Java和C++的相互调用(转)
- 通过JNI实现Java和C++的相互调用(转)
- 通过JNI实现Java和C++的相互调用
- 通过JNI实现Java和C++的相互调用(转)
- 通过JNI实现Java和C++的相互调用(转)