java - 简单 HelloWorld 程序的 JNI : Getting java. lang.UnsatisfiedLinkError

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

我使用的是 Linux (Ubuntu 12.10)。我已经尝试过this问题关于SO和网上很多其他人,但我无法解决我的问题。

这是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 编译它.

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

/* 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

最佳答案

您的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");
 }

关于java - 简单 HelloWorld 程序的 JNI : Getting java. lang.UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31247882/

相关文章:

c - 需要 C 语言的简单帮助

c++ - 代码依赖文档软件

java - 无法从java应用程序在数据库中创建表

java - Alfresco 用于财务数据(表格和数据列表)

java - 使用java在一个连接中进行多个sql查询

c++ - BPP 颜色变化 SDL

java - 将 URL 设置为我的 .fxml

c++ - C++ 中不一致的文件范围变量行为

c# - 将 SAFEARRAY 用于 C++ C#

c - 如何防止 for 循环的最后一个循环中打印空格