繁体   English   中英

Java无法在OSX上使用JNI加载共享库

[英]Java cannot load shared object library with JNI on OSX

我正在尝试使用JNI以最简单的方式在我朋友的64位OSX上加入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 ();
    }
}

test.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

test.c的

#include <stdio.h>
#include <jni.h>
#include "test.h"

JNIEXPORT void JNICALL Java_test_aaa
  (JNIEnv *env, jobject obj) {
    printf ("AWD");
}

生成文件

CC          =   gcc
CFLAGS      =   -Wall -ansi -pedantic -g3

default :
    javac test.java
    javah -jni test
    gcc -c test.c -o test.o -I${HOME}/../../System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/
    gcc -shared -Wl,-install_name,libtest.so -o libtest.so test.o

我不得不使用-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)

所以我真的不知道问题是什么。 我将所有文件复制到Linux上并将-install_name切换为-soname并将路径更改为jni.h,它工作得很好。

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

资料来源: http//developer.apple.com/library/mac/#documentation/Java/Conceptual/Java14Development/05-CoreJavaAPIs/CoreJavaAPIs.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM