参考:http://www.ibm.com/developerworks/cn/java/l-linux-jni/
但参考中的版本过于古老,不利于初学者参照。
环境: gentoo, jdk-1.6, gcc version 4.3.4 (Gentoo 4.3.4 p1.0, pie-10.1.5)
1.
$ vi HelloJni.java
$ cat HelloJni.java
class HelloJni {
public native void SayHello(String name);
static {
try {
System.loadLibrary("HelloJni");
}
catch (UnsatisfiedLinkError e) {
System.err.println("Cannot load HelloJni library:\n " +
e.toString());
}
}
}
2.
$ export CLASSPATH=.:$CLASSPATH
$ javac HelloJni.java
3.
$ javah -classpath . HelloJni
4.
$ vim HelloJni.cpp
$ cat HelloJni.cpp
#include "HelloJni.h"
#include <stdio.h>
//@see HelloJni.h function
JNIEXPORT void JNICALL Java_HelloJni_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;
}
5.
$ g++ -fPIC -O2 -shared -Wl,-soname,libHelloJni.so.1 -o libHelloJni.so.1.0 -I/opt/sun-jdk-1.6.0.17/include/ -I/opt/sun-jdk-1.6.0.17/include/linux HelloJni.cpp
$ ln -sf libHelloJni.so.1.0 libHelloJni.so.1
$ ln -sf libHelloJni.so.1 libHelloJni.so
lrwxrwxrwx 1 mg mg 16 2010-04-07 13:28 libHelloJni.so -> libHelloJni.so.1
lrwxrwxrwx 1 mg mg 18 2010-04-07 13:28 libHelloJni.so.1 -> libHelloJni.so.1.0
-rwxr-xr-x 1 mg mg 6659 2010-04-07 14:20 libHelloJni.so.1.0
6.
$ vim ToSay.java
$ cat ToSay.java
import java.util.*;
public class ToSay {
public static void main(String argv[]) {
ToSay say = new ToSay();
}
public ToSay() {
HelloJni h = new HelloJni();
//调用本地方法向Marlgl问好
h.SayHello("Marlgl");
}
}
$ javac ToSay.java
$ java ToSay
Hello, Marlgl
分享到:
相关推荐
一步步说明在 Linux 平台下如何实现本地共享库与 Java 协同工作
linux JNI实例及其JNI编程模板
巨详细,Linux 下操作JNI 每一个步骤都有。 每个想学童鞋可以看看哦。
jni学习例子 在linux下java调用so执行成功 java类型转成c类型 jstring 转char 相应的.so跟c跟.h跟点lib*.so都有,可以直接运行的
JNI的两个头文件jni.h和jni_md.h,提供需要的人下载!!!!!
linux系统java通过jni方式获取硬盘序列号。包括makefile代码可以直接编译运行,代码解释请参考我的博客文章 http://blog.csdn.net/starter110/article/details/8186788
Linux on POWER 的 JNI 编程实例,对你会有帮助
1. android上调用jni 2. 在jni里c代码中调用系统shell 3. 执行shell命令 4. 返回android应用层
Java JNI调用动态库(Linux、Windows)的实现步骤
linux下的UPD广播,改造后可以用于安卓JNI调用,搜索局域网内的手机,本例重点在学习于局域网UDP广播,不妥之处欢迎指正。 由于完整代码在家中电脑,随和我会放上完整的安卓JNI调用c++实现局域网广播搜索所有wifi连...
android配置ndk,使用swig编译生成jni Java接口调用c++方法。这是成功的例子,前提是你要配置一下你的环境变量。如有疑问,可以去查看我的博客。有相关内容。
LINUX调用JNI动态库.txt LINUX调用JNI动态库.txt
linux UART jni 驱动红外遥控 自己写的已经调试成功
JNI编译环境配置,在windows下亲自实验有效!
次资源完美的实现linux环境下C语言调用java类里面的函数,包括jdk的下载安装配置,java类的编写编译,C语言调用java类的demo代码实现,代码的编译及测试。
使用jni调用c中加法函数,先make,再用 java -Djava.library.path=. JavaMain.java执行
#include"TestNative.h"; JNIEXPORT jint JNICALL Java_TestNative_add (JNIEnv *ev, jobject obj, jint x, jint y) { return x+y; }
1. linux下jni环境搭建 参考:http://blog.csdn.net/zhouyuanjing/article/details/7553706 2. 编写HelloJni工程,在主Activity(本例:HelloJni.java)里声明native函数: 如下: public native String ...
附自己使用成功的源代码(ffmpeng.zip). 根据hello-jni.zip文件生成动态库。内附成功生成的动态库,为经过none优化的解码h264的so文件。 ndk版本:android-ndk-r8-linux-x86 ffmpeg版本:ffmpeg-0.11.3