0

我使用命令提示符生成了一个带有 jni 的 dll 文件。我可以使用“java helloWorld”命令运行下面的代码。但我不能从日食中做到这一点。当我运行程序时,我收到一个错误,上面写着:

线程“main”中的异常 java.lang.UnsatisfiedLinkError:java.lang.ClassLoader.loadLibrary(Unknown Source) at java.lang.Runtime.loadLibrary0(Unknown Source) at java.lang.System 的 java.library.path 中没有 native_library .loadLibrary(Unknown Source) at helloWorld.(helloWorld.java:6)

我使用了 native_library 的绝对路径,如下所示。它有什么问题?

你好世界.java:

public class helloWorld {

    static{     
        System.loadLibrary("native_library");
        System.load("C:/javaworkspace/helloWorld/src/native_library.dll");
        }   

    public static native void writeout(String ss);

    public static void main(String[] args) {    
        String sdf="Hello World";   
        writeout(sdf);              
    }
}

native_library.c:

#include <stdio.h>
#include "helloWorld.h"

JNIEXPORT void JNICALL Java_helloWorld_writeout
  (JNIEnv * env, jclass clazz, jstring str2)
  {
    const char *nativeString = (*env)->GetStringUTFChars(env, str2, 0);

    printf("%s \n",nativeString);

    (*env)->ReleaseStringUTFChars(env, str2, nativeString);
  }
4

2 回答 2

2

在我看来,硬编码你的 DLL 路径并不是最好的主意。请改用命令行参数:

java -Djava.library.path=<path_to_lib_directory>

对于 Eclipse:打开您的构建路径(右键单击项目>“构建路径”>“配置构建路径...”)并设置“本机库位置”属性。

于 2013-03-06T13:11:13.447 回答
0

我有同样的问题,我认为这是因为 Ecplipse 有它自己的库路径,这与你的 dll 路径不同,尝试添加

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

IE

System.setProperty("java.library.path","/home/user/helloworldlib");

它对我有用,希望这有帮助!

于 2013-03-06T12:56:10.597 回答