“线程中的异常”;“主要”;java.lang.UnsatifiedLinkError 3

“线程中的异常”;“主要”;java.lang.UnsatifiedLinkError 3,java,c,gcc,java-native-interface,Java,C,Gcc,Java Native Interface,嗨,伙计们,我尝试过所有的解决方案,比如 java-Djava.library.path=。演示 将dll路径添加到路径 java-Djava.library.path=c:\JNI\demo.dll demo 但仍然存在上述错误 这是我的java代码 class demo { public native void printline(); public static void main(String[]args) { new demo().printli

嗨,伙计们,我尝试过所有的解决方案,比如 java-Djava.library.path=。演示 将dll路径添加到路径 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;
}
#包括
#包括
#包括“demo.h”
JNIEXPORT void JNICALL Java_demo_打印行(JNIEnv*a,作业对象b)
{
printf(“你好!!!”;
返回;
}
编译和运行的步骤

  • javac demo.java
  • javah演示
  • gcc-c-I“c:\jdk1.7.0_55\include”-I“c:\jdk1.7.0_55\include\win32”demo.c
  • gcc-Wl,--addstdcall别名-shared-odemo.dll demo.c
  • java-Djava.library.path=c:\JNI\demo.dll demo
  • 我哪里出了问题吗

    有人能帮我一下吗?

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

    例如:

    • 您需要在java代码中加载库
    • 您需要在
      java.library.path

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

    static
    {
    System.loadLibrary("demo");
    }
    
    应该给你输出


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

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