繁体   English   中英

加载JNI库时出现不满意的链接错误

[英]Unsatisfied Link Error When Loading JNI Library

我正在编写一个简单的Hello World Java程序,以从本机库调用代码。 但是,当我运行程序时,出现以下错误:

 Exception in thread "main" java.lang.UnsatisfiedLinkError: no TestJNI in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1764)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1044)
    at TestJNI.<clinit>(TestJNI.java:4)

下面是代码:
Java的:

//filename: TestJNI.java

public class TestJNI{

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

    private native void helloWorld();

    public static void main(String[] args){
        new TestJNI().helloWorld();
   }
}

C:

//filname:TestJNI.c

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

JNIEXPORT void JNICALL Java_TestJNI_helloWorld(JNIEnv *env, jobject thisObj){
    printf("Hello World!\n");
    return;
}

C文件使用以下编译器,标志和参数进行编译:
clang -o TestJNI.jnilib -I/System/Library/Frameworks/JavaVM.framework/Headers -lc -shared TestJNI.c
然后,按以下方式运行Java应用程序:
java -Djava.library.path=. TestJNI

我正在Mac OS X Yosemite上编译并运行文件。 有人知道我在做什么错吗?

验证java.library.path变量是否指向包含TestJNI库的目录。 你可以试试

System.setProperty("java.library.path", "...directory path...");

或者,使用System.load("...full path to TestJNI..."); 它采用库的完整路径(包括文件扩展名)。 System.loadLibrary推断我相信的文件扩展名)

您的库应命名为.so,以便可以将其作为共享库加载。 我相信您的编译行应如下所示:

铛-共享-未定义dynamic_lookup -o TestJNI.so -I / System / Library / Frameworks / JavaVM.framework / Headers -lc TestJNI.c

暂无
暂无

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

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