| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6645 人关注过本帖
标题:请各路高手不吝赐教:java.lang.UnsatisfiedLinkError: no testdll.so in j ...
只看楼主 加入收藏
pheobus
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-3-7
收藏
 问题点数:0 回复次数:12 
请各路高手不吝赐教:java.lang.UnsatisfiedLinkError: no testdll.so in java.lib

该问题困扰我很久了,我也在网上查了很久,遇到这个错误的很多,但网上提供的解决方法我都试过,还是不行,请各位分析一下,十分感谢:
我试过,运行时通过-D指定java.library.path,设置环境变量LD_LIBRARY_PATH,拷贝这个库文件到打印出的java.library.path所在目录,甚至把gcc改用g++编译库等都试过,没有效果。
我运行的环境是SuSE Linux,JDK1.6.0
java文件:
public class GetPid {
static {
System.out.println(System.getProperty("java.library.path"));
System.loadLibrary("testdll.so");
}
public native static int get();

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(System.getProperty("java.library.path"));
GetPid test = new GetPid();
System.out.println(test.get());
/*try{
System.in.read(new byte[10]);
}
catch(Exception ex){
ex.printStackTrace();
}*/
}
}

错误信息:
linux-z03057:~/workspace/CtoJavaTest # java GetPid
/home/z03057/src/jdk1.6.0/jre/lib/i386/client:/home/z03057/src/jdk1.6.0/jre/lib/i386:/home/z03057/src/jdk1.6.0/jre/../lib/i386:.:/home/z03057/src/jdk1.6.0/jre/lib/i386/client:/home/z03057/src/jdk1.6.0/jre/lib/i386:/lib:/usr/lib:/usr/java/packages/lib/i386:/lib:/usr/lib
Exception in thread "main" java.lang.UnsatisfiedLinkError: no testdll.so in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at GetPid.<clinit>(GetPid.java:5)

linux-z03057:~/workspace/CtoJavaTest # java -Djava.library.path=/usr/lib GetPid
/usr/lib
Exception in thread "main" java.lang.UnsatisfiedLinkError: no testdll.so in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at GetPid.<clinit>(GetPid.java:5)

搜索更多相关主题的帖子: java lib lang testdll 
2007-03-07 09:56
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 

你有没有生成一个叫testdll.so这个文件,放在你的java.library.path里面


可惜不是你,陪我到最后
2007-03-07 10:09
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 

比如放到/home/z03057/src/jdk1.6.0/jre/lib/i386/client里面
你打印出来的那些都可以
也可以放到和class文件一个目录下


可惜不是你,陪我到最后
2007-03-07 10:11
pheobus
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-3-7
收藏
得分:0 
生成了testdll.so,也放在了java.library.path所在的目录,我在程序中把java.library.path所在的目录打印出来了,然后拷贝testdll.so到这个目录,发现还是这个错误;
后来,看到一些网页上说要设置LD_LIBRARY_PATH,我设置了这个目录,然后把库拷到这个目录,也不行;
再有,我在运行java 时指定-Djava.library.path=库所在目录,同样没有效果。

晕啊!
2007-03-07 10:15
pheobus
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-3-7
收藏
得分:0 
我试过放到/home/z03057/src/jdk1.6.0/jre/lib/i386/client及/home/z03057/src/jdk1.6.0/jre/lib/i386/及/usr/lib/甚至JDK下的bin目录里面
而且这个库也放到和class文件一个目录下,同样出现这个错误,我实在想不出是什么原因!!!
2007-03-07 10:18
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
你把System.loadLibrary("testdll.so");改为System.loadLibrary("testdll");

因为后缀名是不用指定的,JVM会根据不同的操作系统,去自己寻找的

可惜不是你,陪我到最后
2007-03-07 10:53
pheobus
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-3-7
收藏
得分:0 
System.loadLibrary("testdll.so");改为System.loadLibrary("testdll");这个我也试过,同样有这个问题。
2007-03-07 11:20
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 

一定要改,如果改后还出现问题,那就是你的testdll.so没 有制做好


可惜不是你,陪我到最后
2007-03-07 11:36
pheobus
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-3-7
收藏
得分:0 
怎么判断testdll.so有没有做好呢?
若我做一个C的程序,调用这个.so,若能通过是否表示已经做好?
2007-03-07 12:46
pheobus
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2007-3-7
收藏
得分:0 

下面是我的另外两个文件,帮忙看看有没有问题:

头文件Get_Pid.h:由javah GetPid生成

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class GetPid */
#ifndef _Included_GetPid
#define _Included_GetPid
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: GetPid
* Method: get
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_GetPid_get
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif

源文件(GetPid.c):用于编译成testdll.so

#include <sys/types.h>
#include <unistd.h>
#include "GetPid.h"
JNIEXPORT jint JNICALL Java_GetPid_get(JNIEnv *a, jclass b)
{
return getpid();
}

2007-03-07 12:53
快速回复:请各路高手不吝赐教:java.lang.UnsatisfiedLinkError: no testdll.so ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036172 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved