我用的是LINUX,前几天问了JAVA的环境变量设置问题,收获很大.后来生成了bo.so文件,我在test.java中调用它.
    test.java的内容:
                   import bo;
                   public class testwq{
                   public static void main(String[] args)                                                                                                                                              
                   {                                                                                                                                              
                     ...........
                                                                                                                                                                                                                                                                                                            }
                   }
    然后我用javac test.java编译它
出现:
testwq.java:1: '.' expected
import bo;
               ^
1 error
 请问:   是哪出错了,该怎么解决?(然后我删去了"import bo;",javac test.java通过,只是java test时:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no goodluck in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1517)
        at java.lang.Runtime.loadLibrary0(Runtime.java:788)
        at java.lang.System.loadLibrary(System.java:834)
        at testdll.<clinit>(testdll.java:5)
        at testwq.main(testwq.java:7)
)

解决方案 »

  1.   

    补充:我的test.java和libbo.so在同一目录下,生成libbo.so后我执行了:
        export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
      

  2.   

    第一你设置lib目录也不用这么麻烦
     export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH 写成 export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH `pwd`不就直接就是当前目录了吗第二import是引入一个包,而这里动态库是bo.so根本就不用import
    第三System.loadLibrary(String name)的用法就是直接load一个动态库文件,不需要写扩展名,系统会觉得使用什么扩名,
    只要在你的类中写成,一般写在static块中static{
        System.loadLibrary("bo");
    }上面的语句类加载初始化的时候就会在你的环境变量中设置的lib目录下寻找对应的动态库,linux下会去找bo.so,windows下会去找bo.dll只要动态库加载之后,你就可以使用你定义的本地方法了而动lib变量不需要设置当前目录的,这个不同于java的classpath,加载动态库首先会在当前目录下找所需的动态库文件
      

  3.   

    通过!不过我调了另一个*.so出现:
    test.java:6: cannot resolve symbol
    symbol  : class bo
    location: class test
            bo test = new bo();
            ^
    test.java:6: cannot resolve symbol
    symbol  : class bo
    location: class test
            bo test = new bo();
                          ^
    2 errors
    我知道是libbo.so的问题,我想问JNI调用的动态库中的函数一定要和JAVA语法完全兼容么?比如一些数据结构,一些LINUX系统调用函数,尤其请推荐有关JNI for LINUX的电子图书或相关书籍,谢谢!