1. ubuntu14.04安装好jdk并设置java_home
2. 设置好android源码编译环境,主要是gcc和make
sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev \
libesd0-dev libwxgtk2.8-dev squashfs-tools build-essential zip curl \
libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils \
xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev \
lib32readline-gplv2-dev gcc-multilib libswitch-perl \
libssl1.0.0 libssl-dev
3. hadoop@hadoop-nb:~$ mkdir jni
hadoop@hadoop-nb:~$ cd jni
hadoop@hadoop-nb:~/jni$ mkdir com
hadoop@hadoop-nb:~/jni$ mkdir com/yf
hadoop@hadoop-nb:~/jni$ vi com/yf/JniTest.java
内容如下:
package com.yf;
import java.lang.System;
public class JniTest{
static {
System.loadLibrary("jni-test");
}
public static void main(String args[]) {
JniTest jniTest = new JniTest();
System.out.println(jniTest.get());
jniTest.set("hello jni world");
}
public native String get();
public native void set(String str);
}
3.编译JniTest.java
hadoop@hadoop-nb:~/jni$ javac com/yf/JniTest.java
4. 生成JNI头文件
hadoop@hadoop-nb:~/jni$ javah -classpath . com.yf.JniTest
生成h文件
hadoop@hadoop-nb:~/jni$ ls
com com_yf_JniTest.h
5. 编辑实现JNI方法的c++
hadoop@hadoop-nb:~/jni$ vi test.cpp
内容如下:
//test.cpp
#include "com_yf_JniTest.h"
#include <jni.h>
#include <stdio.h>
JNIEXPORT jstring JNICALL Java_com_yf_JniTest_get
(JNIEnv *env, jobject thiz){
printf("invoke get in c++\n");
return env->NewStringUTF("Hello from JNI !");
}
JNIEXPORT void JNICALL Java_com_yf_JniTest_set
(JNIEnv *env, jobject thiz, jstring string){
printf("invoke set from c++\n");
char* str = (char*)env->GetStringUTFChars(string,NULL);
printf("%s\n",str);
env->ReleaseStringUTFChars(string,str);
}
6.编译cpp文件,生成so库文件
hadoop@hadoop-nb:~/jni$ gcc -shared -I /home/hadoop/javaweb/jdk1.7.0_79/include -fPIC test.cpp -o lib/libjni-test.so
在lib目录下生成libjni-test.so文件
7. 运行整个程序并输出结果
hadoop@hadoop-nb:~/jni$ java -classpath . -Djava.library.path=lib com.yf.JniTest
invoke get in c++
Hello from JNI !
invoke set from c++
hello jni world
本文介绍如何在Ubuntu 14.04上搭建Java本地接口(JNI)开发环境,并通过一个简单的示例程序演示如何使用JNI连接Java和C++代码。示例包括了创建Java类、生成JNI头文件、编写C++实现以及最终编译和运行。

247

被折叠的 条评论
为什么被折叠?



