Создайте общую библиотеку на C для java

Когда я пытаюсь использовать свою библиотеку.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

Я работаю в Intellij IDEA для java и ни в одной конкретной IDE для моего кода C. Моя ОС - Windows 10. Я действительно не знаю, что мне нужно изменить, чтобы она работала. Ни одна из тем, которые я читал, не помогла мне (например: Создайте действительную общую библиотеку в С). Если вам нужно что-то еще, просто скажите мне.


person Community    schedule 28.06.2018    source источник
comment
Can't load IA 32-bit .dll on a AMD 64-bit platform в вашем исключении должна быть подсказка   -  person soufrk    schedule 28.06.2018
comment
@soufrk Я видел это, но не могу понять, что мне нужно изменить, чтобы создать 64-битную .dll   -  person    schedule 28.06.2018
comment
Вам нужен 64-битный компилятор.   -  person cdarke    schedule 28.06.2018
comment
Итак, я меняю это: `g++ -c -BUILD_DLL main.c` и g++ -shared -o library.dll main.o -Wl,--out-implib,libexample_dll.a на: g++ -m64 -c -BUILD_DLL main.c и g++ -m64 -shared -o library.dll main.o -Wl,--out-implib,libexample_dll.a   -  person    schedule 28.06.2018