Я только сейчас вхожу в мир Java. Я сталкиваюсь с проблемой, когда пытаюсь скомпилировать пример программы для вызова C из Java.
Я хотел попробовать образец кода для JNI (который приведен в JNI.PDF от SUN-Micro).
Код выглядит примерно так:
class HelloWorld {
private native void print();
public static void main(String[] args) {
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}
Я скомпилировал с помощью javac HelloWorld.java и после этого получил файл .H для программы C, используя "javah -jni HelloWorld"
Даже мой код на C также прост:
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"
JNIEXPORT void JNICALL
Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
Я создал .dll в Cygwin, используя "gcc -Wl, - add-stdcall-alias -shared -o HelloWorld.dll HelloWorld.c"
Даже я использовал обычный Linux-метод создания общей библиотеки: "gcc -shared -Wl, -soname, libHelloWorld.so -o libHelloWorld.so HelloWorld.o"
Но когда я запускаю Java HelloWorld, он возвращает Aborted!
Поскольку я не очень разбираюсь в Java, я не уверен, что ошибаюсь.
Я проверил аналогичный код на нескольких веб-сайтах, например: http://www.inonit.com/cygwin/jni/helloWorld/, но получаю аналогичную ошибку.