在C中为Java创建共享库

时间:2018-06-28 07:20:44

标签: java c mingw-w64

当我尝试将我的library.dll与Java一起使用时,出现此错误:

java.lang.UnsatisfiedLinkError: C:\Users\ledev\Desktop\library.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
    at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
    at java.base/java.lang.ClassLoader$NativeLibrary.load(ClassLoader.java:2424)
    at java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(ClassLoader.java:2481)
    at java.base/java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2678)
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2643)
    at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:876)
    at java.base/java.lang.System.loadLibrary(System.java:1875)
    at JNI.HelloJNI.<clinit>(HelloJNI.java:6)
Exception in thread "main"

这是我的代码main.c:

#include "main.h"
#include <stdio.h>
#include<stdlib.h>


DLL_EXPORT void hello_jni()
{
    printf("Hello, JNI !");
}

这是我的main.h:

#ifndef __MAIN_H__
#define __MAIN_H__
#define BUILDING_DLL

#include <windows.h>

#ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
#else
    #define DLL_EXPORT __declspec(dllimport)
#endif


#ifdef __c
extern "C"
{
#endif

DLL_EXPORT void hello_jni();

#ifdef __c
}
#endif

#endif // __MAIN_H__

这是我的Java代码:

package JNI;

public class HelloJNI {

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

    private native void hello_jni();

    public static void main(String[] args) {
        new HelloJNI().hello_jni();  // invoke the native method
    }
}

这就是我创建dll的方式:

g++ -c -BUILD_DLL main.c
g++ -shared -o library.dll main.o -Wl,--out-implib,libexample_dll.a

我正在使用Java的intellij IDEA,而没有用于我的C代码的特定IDE。我的操作系统是Windows 10。 我真的不知道我需要修改什么才能使其工作。我读过的主题都没有对我有所帮助(例如Create a valid shared library in C)。如果您还有其他需要,请告诉我。

0 个答案:

没有答案