Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java无法在OSX上加载带有JNI的共享对象库_Java_C_Java Native Interface_Shared Libraries - Fatal编程技术网

Java无法在OSX上加载带有JNI的共享对象库

Java无法在OSX上加载带有JNI的共享对象库,java,c,java-native-interface,shared-libraries,Java,C,Java Native Interface,Shared Libraries,我试图在我朋友的64位OSX上使用JNI以最简单的方式加入Java和C,我得到了这个错误。以下是所有相关内容: test.java public class test { static {System.loadLibrary ("test");} native void aaa (); public static void main (String [] args) { new test (); } public test () {

我试图在我朋友的64位OSX上使用JNI以最简单的方式加入Java和C,我得到了这个错误。以下是所有相关内容:

test.java

public class test {

    static {System.loadLibrary ("test");}

    native void aaa ();

    public static void main (String [] args) {
        new test ();
    }

    public test () {
        aaa ();
    }
}
测试h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class test */

#ifndef _Included_test
#define _Included_test
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     test
 * Method:    aaa
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_test_aaa
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
我不得不使用-install_name而不是-soname,因为我读到OSX没有像Linux那样的-soname

那我会的

export LD_LIBRARY_PATH=.
java test
我得到

Exception in thread "main" java.lang.UnsatisfiedLinkError: no test in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1856)
    at java.lang.Runtime.loadLibrary0(Runtime.java:845)
    at java.lang.System.loadLibrary(System.java:1084)
    at test.<clinit>(test.java:2)
线程“main”java.lang.UnsatisfiedLinkError中出现异常:java.library.path中没有测试
位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1856)
位于java.lang.Runtime.loadLibrary0(Runtime.java:845)
位于java.lang.System.loadLibrary(System.java:1084)
测试时。(test.java:2)

所以我真的不知道问题出在哪里。我将所有文件复制到Linux上,并将-install_name切换到-soname,并将路径更改为jni.h,它工作正常。

在OS X上,jni查找扩展名为
.jnilib
的库,或标准OS X共享库扩展名为
.dylib


源代码:

在某一点上——Java 1.4,IIRC——仅使用了
。jnilib
,因此如果需要与非常旧的运行时进行反向兼容,建议使用。但不管怎样,
。所以
永远都是不对的。@EdwardThomson-干杯。我找到了一个更好的来源,并用它进行了更新。苹果似乎认为这是从OSX 10.5开始出现的,但这可能只是因为它附带的虚拟机。在OSX上,它是
DYLD\u LIBRARY\u路径
,而不是
LD\u LIBRARY\u路径
export LD_LIBRARY_PATH=.
java test
Exception in thread "main" java.lang.UnsatisfiedLinkError: no test in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1856)
    at java.lang.Runtime.loadLibrary0(Runtime.java:845)
    at java.lang.System.loadLibrary(System.java:1084)
    at test.<clinit>(test.java:2)