初学Java JNI(javac , javah)
来源:互联网 发布:元数据和数据的区别 编辑:程序博客网 时间:2024/06/05 19:40
初学jni,一点心得...
编译环境eclipse, ubuntu
工程路径: src/com/cqb/hellojnitest
package com.cqb.hellojnitest;
public class HelloJniTest {
public native void displayHelloWorld();
static{
System.loadLibrary("hello");
}
public static void main(String[] args){
new HelloJniTest().displayHelloWorld();
}
}
1:进入src/ 目录,然后运行
javac com/cqb/hellojnitest/HelloJniTest.java
可以看到在相应的目录下生成了 HelloJniTest.class
或直接在.java文件所在的目录底下 javac
2: 在src/目录下 及工程包名package com.cqb.hellojnitest所在的目录下
javah com.cqb.hellojnitest.HelloJniTest
3: 接下在src目录下编辑所需要到的.c文件
#include <jni.h>
#include <stdio.h>
#include "com_cqb_hellojnitest_HelloJniTest.h"
JNIEXPORT void JNICALL Java_com_cqb_hellojnitest_HelloJniTest_displayHelloWorld
(JNIEnv *env, jobject obj)
{
printf("HelloWorld JNI!\n");
return;
}
4: 编译.c生成.so文件
gcc -shared -I /home/congqingbin/developEnvironment/jdk1.6.0_31/include -I /home/congqingbin/developEnvironment/jdk1.6.0_31/include/linux -I /usr/include com_cqb_hellojnitest_HelloJniTest.c -o libhello.so
.so名字的生成规则 一定是 lib+"java代码中导入的库的名字"(此例中为hello)+.so
-I参数是导入头文件,因为jni.h 和 jni_md.h不在默认的gcc头文件目录usr/include中
5:运行java com.cqb.hellojnitest.HelloJniTest会报错
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at com.cqb.hellojnitest.HelloJniTest.<clinit>(HelloJniTest.java:6)
因为在默认的库路径找不到.so库
须导入库路径编译 java -Djava.library.path=. com.cqb.hellojnitest.HelloJniTest
运行结果如下
:~/workspace/JNIHelloTest/src$ java -Djava.library.path=. com.cqb.hellojnitest
HelloJniTestHelloWorld JNI!
- 初学Java JNI(javac , javah)
- Java JNI之javac javah的用法
- 关于java jni编译javac javah的问题
- javac javah 生成JNI 错误 找不到class
- jni 之 利用javac,javah生成jni头文件
- Java工具之javac---javadoc--javah--jar
- 关于javac不是内部命令的解决办法 javah jni
- 关于javac不是内部命令的解决办法 javah jni
- JNI javah
- javah 使用(Javah生成JNI头文件)
- javah 使用(Javah生成JNI头文件)
- javah 使用(Javah生成JNI头文件)
- cmd javah 找不到类文件 javac 编译java文件 找不到符号(把class文件生成.h文件)
- mac 终端 javah javac 乱码
- 顺手笔记---javac,javap,javah
- Android jni开发-0(用javah方式编译jni)
- java 的 jni 学习——javah 报错解决
- [Java][Android] Javah Jni 遇到找不到类的解决办法
- asp.net控件开发基础(1)
- 编译原理学习(二)--终结符和非终结符
- java中遍历MAP的几种方法
- hdu2544最短路
- silverlight 中绘制扇形(前台+后台)
- 初学Java JNI(javac , javah)
- RS-232
- 【转载】Table锁定行列
- UIPageControl + UIScrollView 创建一个页面指示器控件
- Android系统build/core下.mk文件分析
- Exercises 4-14
- iis7.5+win2008 出现 HTTP Error 503. The service is unavailable.
- Oracle中recyclebin的保留策略
- 博客搬家