Ubuntu下使用JNI
来源:互联网 发布:做程序员好吗 编辑:程序博客网 时间:2024/06/07 03:54
1. 定义一个Java类Hello:
- public class Hello {
- // 显式地加载本地代码库
- static {
- try {
- // 此处即为本地方法所在链接库名
- System.loadLibrary("hello");
- } catch (UnsatisfiedLinkError e) {
- System.err.println("Cannot load hello library:\n" + e.toString());
- }
- }
- // 声明的本地方法, 必须指定 native 关键字
- public native void SayHello(String strName);
- }
2. 生成本地链接库
1) 生成本地接口头文件:切换到 Hello.class 所在路径,执行:
- javah Hello
2) 在与 Hello.h 相同的路径下创建一个CPP文件 Hello.cpp, 该文件的内容如下:
- #include "Hello.h"
- #include <stdio.h>
- //与Hello.h中函数声明相同
- JNIEXPORT void JNICALL Java_Hello_SayHello (JNIEnv * env, jobject arg, jstring instring)
- {
- //从instring字符串取得指向字符串UTF编码的指针
- const jbyte *str =
- (const jbyte *)env->GetStringUTFChars( instring, JNI_FALSE );
- printf("Hello,%s\n",str);
- //通知虚拟机本地代码不再需要通过str访问Java字符串。
- env->ReleaseStringUTFChars( instring, (const char *)str );
- return;
- }
3) 编译生成共享库:执行:
- g++ -I/home/lib/jdk1.6.0_20/include -I/home/lib/jdk1.6.0_20/include/linux -fPIC -c Hello.cpp
生成 Hello.o:
- g++ -shared -Wl,-soname,libhello.so.l -o libhello.so.1.0 Hello.o
注:这里与原文不同,需要使用g++而非gcc,关于g++与gcc的区别详见:http://blog.csdn.net/longxibendi/archive/2010/01/11/5177779.aspx
将生成的共享库拷贝为标准文件名:
- cp libhello.so.1.0 libhello.so
4) 通知动态链接程序此共享文件的路径:
- export LD_LIBRARY_PATH='pwd':$LD_LIBRARY_PATH
3. 编写一个Java测试类ToSay:
- public class ToSay {
- public static void main(String argv[]) {
- ToSay say = new ToSay();
- }
- public ToSay() {
- Hello h = new Hello();
- // 调用本地方法向John问好
- h.SayHello("John");
- }
- }
运行:
- java ToSay
出现:
- Hello,John
注意事项:
1.新建一个java Project ,直接在src下面建类,不要建包,进入到所建类的路径下 javah Hello
- Ubuntu下使用JNI
- Ubuntu下JNI的使用
- Ubuntu下JNI的简单使用
- Ubuntu下使用Jni开发例子
- Ubuntu下ICTCLAS JNI的使用
- Ubuntu下ICTCLAS JNI的使用
- linux/ubuntu下使用jni的demo
- Ubuntu下使用Jni开发例子
- Ubuntu下JNI的简单使用
- Ubuntu下JNI的简单使用
- ubuntu下JNI初试
- ubuntu下jni的简单使用,不使用ndk工具
- ubuntu下jni的简单使用,使用ndk
- Ubuntu下,在Eclipse中使用JNI调用ffmpeg
- ubuntu下编译JNI程序
- ubuntu下编译JNI程序
- ubuntu下编译JNI程序
- ubuntu下JNI简单调用
- 多线程学习-1
- Firebug Lite让IE6,IE7下的调试不再困难
- Android读写XML(中)——SAX
- rtc驱动
- android CheckBox 自定义样式
- Ubuntu下使用JNI
- 快速排序算法解析
- 凸包
- JavaEE程序员必读图书大推荐1
- document.createElement()的用法
- NSNotification用法 1.点击发送一个通知。 - (void)menuItemClick:(id)sender; { [[NSNotificationCenter default
- Linux下bash.bashrc文件和profile文件
- Hibernate 一对多映射
- mysql双向同步设置及基本原理