开发环境:
win10
jdk1.8+
idea
测试环境:
centos7
gcc
g++
openjdk1.8+
JniDemo类:
package com.mangocool.jni; public class JniDemo { public static void main(String[] args) { System.out.println("hello, this is java!"); new JniDemo().hello(); } public native void hello(); static { System.loadLibrary("cpp_lib_demo"); } }
通过jdk自带javah命令生成c++的头文件:
假设你已经将java配置到了系统变量中:
javah -classpath D:\workDir\studyDemo\src\main\java com.mangocool.jni.JniDemo
生成的头文件com_mangocool_jni_JniDemo.h在你的工程的根目录下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_mangocool_jni_JniDemo */ #ifndef _Included_com_mangocool_jni_JniDemo #define _Included_com_mangocool_jni_JniDemo #ifdef __cplusplus extern "C" { #endif /* * Class: com_mangocool_jni_JniDemo * Method: hello * Signature: ()V */ JNIEXPORT void JNICALL Java_com_mangocool_jni_JniDemo_hello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
根据头文件实现c++代码cppDemo.cpp:
#include "com_mangocool_jni_JniDemo.h" // Import generated header file. #include "jni.h" JNIEXPORT void JNICALL Java_com_mangocool_jni_JniDemo_hello (JNIEnv * env, jobject jb){ printf("%s","hello, this is cpp!"); }
创建Makefile文件:
libcpp_lib_demo.so : cppDemo.cpp g++ -o $@ $+ -fPIC -shared -I /root/jdk1.8.0_321/include -I /root/jdk1.8.0_321/include/linux .PHONY : clean clean : rm libcpp_lib_demo.so
注:记得修改/root/jdk1.8.0_321成你的java路径
将JniDemo.class、cppDemo.cpp、com_mangocool_jni_JniDemo.h、Makefile复制到Centos7下进行编译以及测试:
创建目录jni_demo,以上文件都放在目录下:
进入目录,执行make命令:
可以看到生成了libcpp_lib_demo.so
因为java示例代码有包路径,所以:
mkdir -p com/mangocool/jni mv JniDemo.class com/mangocool/jni/
测试命令:
[root@localhost jni_demo]# /root/jdk1.8.0_321/bin/java -Djava.library.path='.' com.mangocool.jni.JniDemo hello, this is java! hello, this is cpp!
注:运行时指定动态库的路径-Djava.library.path='.',这里是从当前目录下加载动态库libcpp_lib_demo.so
参考来源:https://blog.51cto.com/u_11466419/3792561
标签: JNI demo linux centos7 示例程序
分享:
崇尚极简,热爱技术,喜欢唱歌,热衷旅行,爱好电子产品的一介码农。
联系QQ:58742094
联系电话:
工作邮箱:
当你的才华还撑不起你的野心的时候,你就应该静下心来学习,永不止步!
人生之旅历途甚长,所争决不在一年半月,万不可因此着急失望,招精神之萎葸。
Copyright 2015- 芒果酷(mangocool.com) All rights reserved. 湘ICP备14019394号
免责声明:本网站部分文章转载其他媒体,意在为公众提供免费服务。如有信息侵犯了您的权益,可与本网站联系,本网站将尽快予以撤除。