1、创建一个java文件(HelloWorld.java)。
class HelloWorld {
static {
System.loadLibrary("HelloWorld");
}
private native void print();
public static void main(String args[]) {
new HelloWorld().print();
}
}
2、使用javac命令编译该java文件,在终端输入"javac HelloWorld.java"。生成HelloWorld.class.
3、使用javah命令生成头文件。在终端输入"javah -jni HelloWorld", 生成HelloWorld.h
4、使用本地方法实现头文件中的方法。
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *env, jobject obj)
{
printf("HelloWorld JNI!/n");
return;
}
5、用gcc编译生成so文件。
gcc -shared -I /usr/lib/jvm/java-7-oracle/include/ -I /usr/lib/jvm/java-7-oracle/include/linux/ -I /usr/include HelloWorld.c -o libHelloWorld.so
6、运行。
在终端输入java HelloWorld.
7、这时你会发现出问题了
这时java文件中loadlib时找不到这个so导致的,我们这样来运行:"java -Djava.library.path=. HelloWorld",通过设置java.library.path来找到这个so。
好了,到此为止,一个简单的HelloWorld就完成了。
注意:
本机库的装入由调用 System.loadLibrary()
方法的类的类装入器启动 —— 在清单 6 中,就是 UnsatisfiedLinkErrorTest
的类装入器。根据使用的类装入器,会搜索不同的位置:
- 对于由 bootstrap 类装入器装入的类,搜索
sun.boot.library.path
。 - 对于由扩展类装入器装入的类,先搜索
java.ext.dirs
,然后是sun.boot.library.path
,然后是java.library.path
。 - 对于由系统类装入器装入的类,搜索
sun.boot.library.path
,然后是java.library.path
。
在清单 6 中,UnsatisfiedLinkErrorTest
类是由系统类装入器装入的。要装入所引用的本机库,这个类装入器先查找sun.boot.library.path
,然后查找 java.library.path
。因为在两个位置中都没有需要的库,所以类装入器抛出UnsatisfiedLinkageError
。
相关推荐
本文档主要讲述的是Java本地调用JNI使用规范详解;JNI概述;JavaNative Interface的缩写,中文为Java本地调用。从Java1.1开始,JNI即成为Java标准的一部分。 JNI设计的目的是为了允许Java代码与其他语言进行交互。但...
android下JNI使用方法.JNI入门教程等网络资源合集
AIDL和JNI使用的小例子,文件为eclipse下的源码,配合我的博客可以查看如何使用aidl和jni
android jni使用curl进行http请求和文件下载,具体说明参考博客 http://blog.csdn.net/csdn49532/article/details/50680716
jni使用string相互调用 Java 传递 String 给C C 传递 jstring 给 Java
JNI使用技巧.doc
android jni使用java、c c++相互调用
JNI使用规范 教你如何是用JNI 本资源能够完全教会你如何使用JNI 从配置环境到最后的运用 JAVA书籍
这是一个jni使用实例,对想学习jni开发的同学有一定的帮助。希望有用。
android jni使用方法有图有文字
理解什么是 JNI JNI的操作步骤 JNI的适用场合
JNI使用demo,包含C/C++调用Native和jNativeC/C++ Cmake文件的使用和配置规则,注册规则 JNI函数的动态注册和动态注册示例 同时附上JNI文章详细解说
Android上编写Native jni调用,java调用c ,c调用java。
JNI,全称为Java Native Interface,即Java本地接口,JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互。即可以在Java代码中调用C/C++等语言的代码或者在C/C++代码中调用Java代码。由于JNI...
这是一个详细的 JNI 使用文档,包括了JNI中C及C++的语法
例子通过jni调用libzip库读取压缩文件,和通过ndk自带api接口读取assets资源文件,附测试工程。
android,使用jni,java调用c代码程序示例。
这是我自己写的jni jobjectarray的demo共享一下
java中NDK的使用,java Native Interface的使用技巧
int float double string char * C->Java Java->C 实例