首页 / JAVA / 使用java的本机方法
使用java的本机方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用java的本机方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2568字,纯文字阅读大概需要4分钟。
内容图文
![使用java的本机方法](/upload/InfoBanner/zyjiaocheng/795/11b3325cd84e4accb0fe3426bc1354c8.jpg)
我是java新手,当前正在学习本机方法,当我创建以下文件时:
Main.java:
public class Main {
public native int intMethod(int i);
public static void main(String[] args) {
System.loadLibrary("Main");
System.out.println(new Main().intMethod(2));
}
}
MAIN.C:
#include <jni.h>
#include "Main.h"
JNIEXPORT jint JNICALL Java_Main_intMethod(
JNIEnv *env, jobject obj, jint i) {
return i * i;
}
编译并运行:
javac Main.java
javah -jni Main
gcc -shared -fpic -o libMain.so -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux Main.c
java -Djava.library.path=. Main
输出:
4
但是,当我这样做时:
troller.java:
public class troller {
public native int intMethod(int i);
public static void main(String[] args) {
System.loadLibrary("troller");
System.out.println(new troller().intMethod(2));
}
}
troller.c:
#include <jni.h>
#include "troller.h"
JNIEXPORT jint JNICALL Java_Main_intMethod(
JNIEnv *env, jobject obj, jint i) {
return i * i;
}
编译并运行:
javac troller.java
javah -jni troller
gcc -shared -fpic -o libMain.so -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux Main.c
java -Djava.library.path=. troller
输出:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no troller in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at troller.main(troller.java:4)
如果我更改名称,为什么程序停止工作?
编辑:
在查看答案后,我注意到某些不一致现在重新创建了所有文件,但错误仍然存??在:
Native.java
public class Native{
public native int intMethod(int i);
public static void main(String[] args){S
System.loadLibrary("Native");
System.out.println("In java... :)");
System.out.println(new Native().intMethod(4));
}
}
Native.c
#include<jni.h>
#include"Native.h"
JNIEXPORT jint JNICALL Java_Native_intMethod(
JNIEnv *env, jobject obj, jint i){
printf("In C .... :)");
return i*i;
}
编译并运行
javac Native.java
javah -jni Native
gcc -shared -fpic -o libMain.so -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux Native.c
java -Djava.library.path=. Native
Exception in thread "main" java.lang.UnsatisfiedLinkError: no Native in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at Native.main(Native.java:4)
解决方法:
使用javah为本机方法生成.h存根时,它包含类的包和类名.这样您就可以在不同的类中使用相同的方法名称.
Java_Main_intMethod
需要重命名为
Java_troller_intMethod
如果类相同但包更改,则还必须更改方法名称.
注意:C没有@Override,您可以实现未在.h文件中声明的方法.
内容总结
以上是互联网集市为您收集整理的使用java的本机方法全部内容,希望文章能够帮你解决使用java的本机方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。