【问题标题】:Exception in thread "main" java.lang.UnsatisfiedLinkError 3线程“主”java.lang.UnsatisfiedLinkError 3 中的异常
【发布时间】:2014-05-26 07:21:42
【问题描述】:

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

但是还是上面的错误。

这是我的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 演示
  3. gcc -c -I"c:\jdk1.7.0_55\include" -I"c:\jdk1.7.0_55\include\win32" demo.c
  4. gcc -Wl,--add-stdcall-alias -shared -o demo.dll demo.c
  5. java -Djava.library.path=c:\JNI\demo.dll 演示

我是不是哪里出错了?

谁能帮帮我。

【问题讨论】:

  • 你确定使用像printf 这样会导致很大的副作用(在标准输出缓冲区上写入)是合法的。你确定JVM不会消除这种行为吗?

标签: java c gcc java-native-interface


【解决方案1】:

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

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

应该给你输出。

另外,根据使用的gcc编译器,确定生成的dll文件是x32还是x64。

【讨论】:

    【解决方案2】:

    寻找“JNI hello world”(或许多其他术语,可能)会给你答案。

    例如:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多