【问题标题】:JNI : Getting java.lang.UnsatisfiedLinkError for simple HelloWorld ProgramJNI:为简单的 HelloWorld 程序获取 java.lang.UnsatisfiedLinkError
【发布时间】:2015-07-06 14:01:02
【问题描述】:

我使用的是 Linux (Ubuntu 12.10)。我已经在 SO 上尝试了this 问题以及网络上的许多其他问题,但我无法解决我的问题。

这里是java文件:

class HelloWorld
{
    public native void display();

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

    public static void main(String args[])
    {
        HelloWorld hw = new HelloWorld();
        hw.display();
    }
}

我使用javac HelloWorld.java编译它。

然后我使用javah -jni HelloWorld.class 文件创建了头文件。我得到了这个头文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    display
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_display
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

在此之后,我创建了以下 C 文件:

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

void display();

int main()
{
    display();
    return 0;
}

void display()
{
    printf("Hello World Naveen\n");
}

并使用gcc -o libHelloWorld.so -fPIC -lc -shared -I/usr/lib/jvm/java-6-oracle/include/ -I/usr/lib/jvm/java-6-oracle/include/linux HelloWorld.c 编译。

然后我做了echo $LD_LIBRARY_PATH=.。但是当我运行java HelloWorld 时,我得到UnsatisfiedLinkError

【问题讨论】:

    标签: java c++ c oracle java-native-interface


    【解决方案1】:

    您的HelloWorld.c 文件不应包含maindisplay。相反,它应该包含HelloWorld.display 方法的实现。例如:

     #include "HelloWorld.h"
     #include <stdio.h>
    
     JNIEXPORT void JNICALL Java_HelloWorld_display (JNIEnv * env, jobject obj) {
         printf ("Hello World\n");
     }
    

    【讨论】:

      【解决方案2】:

      您在 C 文件中的本机函数实现必须与生成的方法签名相匹配。

      使用

      JNIEXPORT void JNICALL Java_HelloWorld_display(JNIEnv * env, jobject obj)
      {
      }
      

      没有

      void display()
      {
      }
      

      【讨论】:

        猜你喜欢
        • 2014-10-26
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 2012-08-31
        • 2013-03-04
        • 1970-01-01
        • 2014-05-14
        • 2019-05-08
        相关资源
        最近更新 更多