用C做的SO,然后通过JAVA JNI 调用SO,总是报错UnsatisfiedLinkError
我看到网上有例子,试着用C做的SO,然后通过JAVA JNI 调用SO
将libgoodluck.so放在/home/zhu/lib下,
并且环境变量做了如下设置
/usr/lib/jvm/java-1.5.0-sun-1.5.0.22/jre/lib/i386/client:
/usr/lib/jvm/java-1.5.0-sun-1.5.0.22/jre/lib/i386:
/usr/lib/jvm/java-1.5.0-sun-1.5.0.22/jre/../lib/i386:
/home/zhu/lib
在执行java com.test.HelloJNI的报如下错误
Exception in thread "main" java.lang.UnsatisfiedLinkError: set
at com.pcd.HelloJNI.set(Native Method)
at com.pcd.HelloJNI.main(HelloJNI.java:21)
---------------------------
JAVA文件:
package com.test;
public class HelloJNI {
static{
System.loadLibrary("goodluck");
}
public native static int get();
public native static void set(int i);
@SuppressWarnings("static-access")
public static void main(String[] args) {
HelloJNI test = new HelloJNI();
test.set(10);
System.out.println(test.get());
}
}
----------------
.h文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_test_HelloJNI */
#ifndef _Included_com_test_HelloJNI
#define _Included_com_test_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_test_HelloJNI
* Method: get
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_test_HelloJNI_get
(JNIEnv *, jclass);
/*
* Class: com_test_HelloJNI
* Method: set
* Signature: (I)V
*/
JNIEXPORT void JNICALL Java_com_test_HelloJNI_set
(JNIEnv *, jclass, jint);
#ifdef __cplusplus
}
#endif
#endif
---------------
.c文件:
#include "com_test_HelloJNI.h"
int i = 0;
JNIEXPORT jint JNICALL Java_net_wangliping_HelloJNI_get(JNIEnv *env, jclass jc){
return i;
}
JNIEXPORT void JNICALL Java_net_wangliping_HelloJNI_set(JNIEnv *env, jclass jc, jint j){
i = j;
}