JNI:为简单的 HelloWorld 程序获取 java.lang.UnsatisfiedLinkError

Posted

技术标签:

【中文标题】JNI:为简单的 HelloWorld 程序获取 java.lang.UnsatisfiedLinkError【英文标题】:JNI : Getting java.lang.UnsatisfiedLinkError for simple HelloWorld Program 【发布时间】: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

【问题讨论】:

【参考方案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()


【讨论】:

以上是关于JNI:为简单的 HelloWorld 程序获取 java.lang.UnsatisfiedLinkError的主要内容,如果未能解决你的问题,请参考以下文章

Android JNI编程——JNI概念以及C语言Dev-C++开发环境搭建编写HelloWorld

[JAVA]JNI之HelloWorld

JNI/NDK开发指南—— JNI开发流程及HelloWorld

[jni]Getting Started

IntelliJ IDEA平台下JNI编程—HelloWorld篇

IntelliJ IDEA平台下JNI编程—HelloWorld篇