将本机库添加到具有不满意链接的Java项目结果中

时间:2015-11-11 00:04:03

标签: java eclipse dll java-native-interface

当我尝试添加.dll来构建java项目的路径时,我经常遇到错误。 我使用以下命令使用mingw64创建了.dll文件:

gcc -o ctest.dll -shared -I"C:\Program Files\Java\jdk1.8.0_45\include" 
-I"C:\Program Files\Java\jdk1.8.0_45\include\win32" ctest.c -LC -m64

使用dll创建的.dll文件与主类位于同一目录中。

bin/com/jni

我尝试通过执行以下步骤将.ddl包含在Eclipse的Java项目中:

  • BuildPath - >本机库位置 - > path_to_directory_with_.dll

结果如下:

Exception in thread "main" java.lang.UnsatisfiedLinkError: com.jni.HelloWorld.helloFromC()V
    at com.jni.HelloWorld.helloFromC(Native Method)
    at com.jni.HelloWorld.main(HelloWorld.java:14)

由于上述方法无效,我尝试从命令行运行应用程序:

C:\Users\Z003DP9F\java-8 workspace\workspace\JNI_Test\bin>java 
-Djava.library.path="C:\Users\Z003DP9F\java-8 workspace\workspace\JNI_Test\bin\com\jni" 
com.jni.HelloWorld

和同样的错误,虽然在第12行而不是14,如上例所示。

   Exception in thread "main" java.lang.UnsatisfiedLinkError: com.jni.HelloWorld.helloFromC()V
            at com.jni.HelloWorld.helloFromC(Native Method)
            at com.jni.HelloWorld.main(HelloWorld.java:12)

c file:

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

JNIEXPORT void JNICALL Java_HelloWorld_helloFromC
  (JNIEnv * env, jobject jobj)
{
    printf("Hello from C!\n");
}

Java主类:

package com.jni;

public class HelloWorld {
    native void helloFromC(); /* (1) */
    static {

        System.loadLibrary("ctest"); /* (2) */

    }
    static public void main(String argv[]) {
        HelloWorld helloWorld = new HelloWorld();
        helloWorld.helloFromC(); /* (3) */
    }
}

我一直试图设置的例子是:

jni

1 个答案:

答案 0 :(得分:1)

签名错了;您可以使用 javah 为您获取签名,但在您的情况下,它只是

JNIEXPORT void JNICALL Java_com_jni_HelloWorld_helloFromC(JNIEnv * env, jobject thiz)