Создать общую библиотеку в C для Java - PullRequest
0 голосов
/ 28 июня 2018

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

Вот мой главный.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. Я действительно не знаю, что мне нужно изменить, чтобы это работало. Мне не помогла ни одна из прочитанных тем (например: Создайте действительную общую библиотеку в C ). Если тебе нужно что-то еще, просто скажи мне.

...