gpt4 book ai didi

java - 加载 JNI 库时出现 Unsatisfied Link 错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:48 26 4
gpt4 key购买 nike

我正在编写一个简单的 Hello World Java 程序来调用 native 库中的代码。但是,当我运行该程序时,我收到以下错误:

 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", "...目录路径...");

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

关于java - 加载 JNI 库时出现 Unsatisfied Link 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32852672/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com