用C做的SO,然后通过JAVA JNI 调用SO,总是报错UnsatisfiedLinkError

lgmsyy 2014-03-14 09:33:22
我看到网上有例子,试着用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;
}
...全文
144 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgmsyy 2014-03-14
  • 打赏
  • 举报
回复
怎么没人解答啊
lgmsyy 2014-03-14
  • 打赏
  • 举报
回复
???????????
lgmsyy 2014-03-14
  • 打赏
  • 举报
回复
有人帮忙吗?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧