[请教]我的JNI库调用,package包找不到路径

jeanloveglm 2008-04-14 01:50:57
我写了一个java的jni调用文件Helloworld.java。如果我加入包命令就调用失败,java.lang.UnsatisfiedLinkError。请各位大虾和版主帮我找找原因:
========================
(1)java文件的内容
public class HelloWorld
{
public native void displayHelloWorld();
static {
System.loadLibrary("hello";
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
// System.getProperties().list(System.out);
}
}
(2)然后javac编译,javah得到头文件,写了一个libhello.so库,然后
java HelloWorld就能得到
>HelloWorld的输出。

但是:如果我在HelloWorld.java的头一行加入package abc;
然后javac编译
>javac HelloWorld.java -d .
就会在当前目录下生成名叫abc的目录:abc/HelloWorld.class。再按包的名字调用就有错误。
>java abc.HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError: displayHelloWorld
at dpsystem.HelloWorld.main(HelloWorld.java:9)
*************************************************************

(3)环境变量CLASSPATH和LD_LIBRARY_PATH都含有当前路径"."
(4)我的运行环境是Solaris10
> java -version
java version "1.2.2"
Solaris VM (build Solaris_JDK_1.2.2_17b, native threads, sunwjit)
我在一台Linux机器(2.6.17)和jdk1.6.03上面测试的结果是一样的。

请大家帮忙看看,我在线等,先谢过了
...全文
222 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeanloveglm 2008-04-14
  • 打赏
  • 举报
回复
已解决,javah的时候加上包的全路径
jeanloveglm 2008-04-14
  • 打赏
  • 举报
回复
谢谢mialliujun的提示:

确实是你说的情况。原来.so和.class是同一个目录,在加入了package命令以后又拷贝了一份到abc目录下
然后当前目录下java HelloWorld也是报相同的错误。

我的LD_LIBRARY_PATH里面已经包含了".". 由于没有root权限我没法放到系统库目录下面去。

可以有办法解决么?
miaoliujun 2008-04-14
  • 打赏
  • 举报
回复
UnsatisfiedLinkError是运行时错误,和编译没有关系
这个错误是没有找到对应的SO文件
你的SO放在什么位置?建议直接放到系统的库文件目录下;你出现这样的情况,是不是因为原来so和java放在一个目录下?后来因为有了package就不在一个目录下了呢?

62,623

社区成员

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

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