使用JNI调用本地库,结果显示可以找不到方法.
下面是代码:
public class JNISample {
public native int intMethod(int n);
public static void main(String[] args) {
System.loadLibrary("Sample");
JNISample sample = new JNISample();
int square = sample.intMethod(5);
System.out.println("intMethod: " + square);
}
}
javah JNISample 生成 JNISample.c 生成JNISample.h#include <jni.h>
/* Header for class JNISample */#ifndef _Included_JNISample
#define _Included_JNISample
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jint JNICALL Java_JNISample_intMethod
(JNIEnv *, jobject, jint);
#ifdef __cplusplus
}
#endif
#endif编辑JNISample.c:
#include <jni.h>
#include "JNISample.h"
JNIEXPORT jint JNICALL Java_JNISample_intMethod(JNIEnv *env, jobject obj, jint num)
{
return num * num;
}
void main(){}在linux 下编译:
JAVA_HOME="/usr/java/jdk1.4"
gcc -fpic -c JNISample.c 生成JNISample.o
gcc -shared -Wl,-soname,JNISample.o -o libSample.so
生成libSample.so
export LD_LIBRARY_PATH="/root/shanch/basis/build/linux-x86-suse"
指定库路径
运行:
java JNISample结果:
Exception in thread "main" java.lang.UnsatisfiedLinkError: intMethod
at JNISample.intArrayMethod(Native Method)
at JNISample.main(JNISample.java:7)
没有说找不到Sample库,应该是可以装载的
可是为什么找不到方法呢??百思不得其解 希望各位大虾不吝赐教
(一直没怎么上,积分有点少,但这是我的全部积分了 希望不要因为几点积分而抹杀了一个人的求知欲)
下面是代码:
public class JNISample {
public native int intMethod(int n);
public static void main(String[] args) {
System.loadLibrary("Sample");
JNISample sample = new JNISample();
int square = sample.intMethod(5);
System.out.println("intMethod: " + square);
}
}
javah JNISample 生成 JNISample.c 生成JNISample.h#include <jni.h>
/* Header for class JNISample */#ifndef _Included_JNISample
#define _Included_JNISample
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jint JNICALL Java_JNISample_intMethod
(JNIEnv *, jobject, jint);
#ifdef __cplusplus
}
#endif
#endif编辑JNISample.c:
#include <jni.h>
#include "JNISample.h"
JNIEXPORT jint JNICALL Java_JNISample_intMethod(JNIEnv *env, jobject obj, jint num)
{
return num * num;
}
void main(){}在linux 下编译:
JAVA_HOME="/usr/java/jdk1.4"
gcc -fpic -c JNISample.c 生成JNISample.o
gcc -shared -Wl,-soname,JNISample.o -o libSample.so
生成libSample.so
export LD_LIBRARY_PATH="/root/shanch/basis/build/linux-x86-suse"
指定库路径
运行:
java JNISample结果:
Exception in thread "main" java.lang.UnsatisfiedLinkError: intMethod
at JNISample.intArrayMethod(Native Method)
at JNISample.main(JNISample.java:7)
没有说找不到Sample库,应该是可以装载的
可是为什么找不到方法呢??百思不得其解 希望各位大虾不吝赐教
(一直没怎么上,积分有点少,但这是我的全部积分了 希望不要因为几点积分而抹杀了一个人的求知欲)
我就是根据这教程写的,谁知道出现这种问题。“应该是libSample.so路径得问题“
如果是libSample.so路径不正确,应该会报找不到 Sample 这个库文件,但是现在已经不是找不到库,而是找不到方法