我在linux系统里编写的java程序中,使用如下代码调用共享库:static{
    System.loadLibrary("libspeak.so");
  }请问libspeak.so应该放在什么位置,是否需要设置环境变量?

解决方案 »

  1.   

    我把libspeak.so放在/usr/lib、/lib和LD_LIBRARY_PATH环境变量里的路径下运行时都会出现错误:java.lang.UnsatisfiedLinkError:libspeak.so:file not found.请问应该放在哪里?谢谢!
      

  2.   

    我是在linux里用gcj编译的,没有安装JVM.linux里的共享库都是放在/usr/lib和/lib里的,我试过都不行,不知道System.loadLibrary()是在哪里查找共享库.
      

  3.   

    这是jdk里面ClassLoader的源代码,System.loadLibrary()最终调用的是这个方法.
    看起来应该是classpath和java的一些系统目录    // Invoked in the java.lang.Runtime class to implement load and loadLibrary.
        static void loadLibrary(Class fromClass, String name,
        boolean isAbsolute) {
            ClassLoader loader =
        (fromClass == null) ? null : fromClass.getClassLoader();
            if (sys_paths == null) {
        usr_paths = initializePath("java.library.path");
        sys_paths = initializePath("sun.boot.library.path");
            }
            if (isAbsolute) {
        if (loadLibrary0(fromClass, new File(name))) {
            return;
        }
        throw new UnsatisfiedLinkError("Can't load library: " + name);
    }
    if (loader != null) {
        String libfilename = loader.findLibrary(name);
        if (libfilename != null) {
            File libfile = new File(libfilename);
            if (!libfile.isAbsolute()) {
        throw new UnsatisfiedLinkError(
        "ClassLoader.findLibrary failed to return an absolute path: " + libfilename);
    }
    if (loadLibrary0(fromClass, libfile)) {
        return;
    }
    throw new UnsatisfiedLinkError("Can't load " + libfilename);
        }
    }
    for (int i = 0 ; i < sys_paths.length ; i++) {
        File libfile = new File(sys_paths[i], System.mapLibraryName(name));
        if (loadLibrary0(fromClass, libfile)) {
            return;
        }
    }
    if (loader != null) {
        for (int i = 0 ; i < usr_paths.length ; i++) {
            File libfile = new File(usr_paths[i],
    System.mapLibraryName(name));
    if (loadLibrary0(fromClass, libfile)) {
        return;
    }
        }
    }
      

  4.   

    要不你放到jre的bin目录下面看看里面有很多库