线程" main"中的例外情况java.lang.UnsatisfiedLinkError 3

时间:2014-05-26 07:21:42

标签: java c gcc java-native-interface

大家好我已经尝试了所有的解决方案 java -Djava.library.path =。演示 将dll路径添加到PATH java -Djava.library.path = c:\ JNI \ demo.dll demo

但仍然是上述错误。

这是我的java代码..

class demo
{
    public native void printline();
    public static void main(String[]args)
    {
        new demo().printline();
    }
}

这是我的c代码......

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

#include "demo.h"

JNIEXPORT void JNICALL Java_demo_printline(JNIEnv *a, jobject b)
{
    printf("Hello wrold!!!");
    return;
}

编译和运行的步骤,

  1. javac demo.java
  2. javah demo
  3. gcc -c -I&#34; c:\ jdk1.7.0_55 \ include&#34; -I&#34; C:\ jdk1.7.0_55 \包括\ WIN32&#34; demo.c
  4. gcc -Wl, - add-stdcall-alias -shared -o demo.dll demo.c
  5. java -Djava.library.path = c:\ JNI \ demo.dll demo
  6. 我在某个地方出错了?

    有人可以帮助我,。

2 个答案:

答案 0 :(得分:1)

尝试在静态块中的java代码中运行时加载dll文件,如:

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

应该给你输出。

此外,请确保根据使用的gcc编译器生成的dll文件是x32或x64。

答案 1 :(得分:0)

寻找&#34; JNI你好世界&#34; (或许多其他术语,可能),会给你答案。

例如:

http://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html

  • 您需要在Java代码中加载库
  • 您需要在java.library.path
  • 中指定库目录的路径,而不是库本身的路径