免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5211 | 回复: 6
打印 上一主题 下一主题

[求助]!我的JNI类运行错误,找不到库,如何解决? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-07 15:35 |只看该作者 |倒序浏览
我在solaris上面作了HelloWorld的JNI程序,所有文件都在同一个目录下面。
按照网上的一个例子,运行我的JNI程序出现这样的错误。加了-Djava.library.path=. 参数也不行。
java -Djava.library.path=. HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
        at java.lang.Throwable.fillInStackTrace(Native Method)
        at java.lang.Throwable.<init>(Throwable.java:87)
        at java.lang.Error.<init>(Error.java:43)
        at java.lang.LinkageError.<init>(LinkageError.java:36)
        at java.lang.UnsatisfiedLinkError.<init>(UnsatisfiedLinkError.java:35)
        at java.lang.ClassLoader.loadLibrary(Compiled Code)
        at java.lang.Runtime.loadLibrary0(Runtime.java:467)
        at java.lang.System.loadLibrary(System.java:771)
        at <Unloaded Method>
=====================================
我的文件和操作如下
>cat HelloWorld.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);
    }
}
>javac HelloWorld.java
>javah HelloWorld
> cat hello.c
#include <jni.h>
#include "HelloWorld.h"
#include <stdio.h>

JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
    printf("Hello world!\n";
    return;
}
>gcc -fpic -c hello.c -I/app/java/j2sdk1.4.2_07/include -I/app/java/j2sdk1.4.2_07/include/solaris
>gcc --share -o hello.so -lc hello.o
>setenv LD_LIBRARY_PATH .{LD_LIBRARY_PATH}
>setenv java.library.path .
>java -Djava.library.path=. HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
        at java.lang.Throwable.fillInStackTrace(Native Method)
        at java.lang.Throwable.<init>(Throwable.java:87)
        at java.lang.Error.<init>(Error.java:43)
        at java.lang.LinkageError.<init>(LinkageError.java:36)
        at java.lang.UnsatisfiedLinkError.<init>(UnsatisfiedLinkError.java:35)
        at java.lang.ClassLoader.loadLibrary(Compiled Code)
        at java.lang.Runtime.loadLibrary0(Runtime.java:467)
        at java.lang.System.loadLibrary(System.java:771)
        at <Unloaded Method>

望各位大虾指教!

论坛徽章:
0
2 [报告]
发表于 2008-04-07 15:50 |只看该作者
可能是最笨的方法:
在/usr/lib里做一个链接
# ln -s path_to_hello.so/hello.so .

论坛徽章:
0
3 [报告]
发表于 2008-04-07 16:32 |只看该作者

没有最可行的方法么?

谢谢caojiqun的回答

这个方法可以说是一个hack吧,但是这并不能作为部署的方法呀。

有没有不饶过去的解决途径呢???

论坛徽章:
0
4 [报告]
发表于 2008-04-07 18:57 |只看该作者
试试在 .cshrc 设置 LD_LIBRARY_PATH 加上 hello.so 所在的路径

论坛徽章:
0
5 [报告]
发表于 2008-04-08 09:40 |只看该作者

继续失败中。。。。。。请高手继续帮忙!

设置了.cshrc没有解决。
感觉这样和setenv是一样的效果。
仍然报这个错误:
========================
java HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
        at java.lang.Throwable.fillInStackTrace(Native Method)
        at java.lang.Throwable.<init>(Throwable.java:87)
        at java.lang.Error.<init>(Error.java:43)
        at java.lang.LinkageError.<init>(LinkageError.java:36)
        at java.lang.UnsatisfiedLinkError.<init>(UnsatisfiedLinkError.java:35)
        at java.lang.ClassLoader.loadLibrary(Compiled Code)
        at java.lang.Runtime.loadLibrary0(Runtime.java:467)
        at java.lang.System.loadLibrary(System.java:771)
        at <Unloaded Method>

论坛徽章:
0
6 [报告]
发表于 2008-04-08 09:49 |只看该作者
hello.so改为libhello.so再试试

论坛徽章:
0
7 [报告]
发表于 2008-04-08 09:56 |只看该作者

解决!

谢谢tinywind,瞬间运行通过了。
看来俺这样的UNIX C/java初学者还是很幸运的,CU上必有我师!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP