UnsatisfiedLinkError这个错误好像是找不到so文件,你把你的libjrrd放到系统的/lib目录中,然后Load的时候名字不要写错了,是"jrrd"。至于share和static好像都没有影响。你再试一试。也可以到网上搜索有关文章。

解决方案 »

  1.   

    这个方法我试过,还是出错:
    java.lang.UnsatisfiedLinkError: /lib/libjrrd.so: /lib/libjrrd.so: undefined symbol: rrd_create
            at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    ... ... ...        
    unexpected error, reason: /lib/libjrrd.so: /lib/libjrrd.so: undefined symbol: rrd_create
    我编译生成的.so文件比正确的.so(以前成功调用时留下的)小很多,所以估计是.so的问题
      

  2.   

    是不是你的rrd_create等其他方法命名有问题啊,所以错误信息中报告undefined symbol,以前我也遇到过,就是.h的问题,用javah工具生成.h文件后,我发现如果你的类名有package,在.h文件中都丢了,也就是你需要手动加入package名,具体规则就是把.换成_就可以了,记住前面有个java_别丢了,你再试一试。
      

  3.   

    这个rrd_jinterface.c是别人已经写好的。
    我先javah Interface,生成了Interface.h,然后我对比了Interface.h里面的函数声明和rrd_jinterface.c里面的函数声明,确信一致。
    至于rrd_create的命名和实现,都是别人已经做好的,曾经成功调用过,应该没有问题。另外,编译出错提示:usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../crt1.o: In function `_start':
    /usr/lib/gcc-lib/i386-redhat-linux/2.96/../../../crt1.o(.text+0x18): 是什么意思?多谢指教。
      

  4.   

    这个问题我就不是很清楚了,很少在Linux下用gcc,所以你的问题我也不能帮你解决了。在jni中,假如你的方法名定义为rrd_create,如果该类有package假如为com.xxx,则该方法在.h中的申明应该为Java_com_xxx_Interface_rrd_create,具体方法的参数就不会错误了
    (可能这不能帮你解决问题)。