ubuntu编写jni并编译

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






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值