Я сейчас вхожу в мир 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-метод создания Shared Lib:" gcc -shared -Wl, -soname, libHelloWorld.so -o libHelloWorld.so HelloWorld.o "
Но когда я запускаюjava HelloWorld, возвращаемое значение Прервано!
Поскольку я не очень разбираюсь в Java, я не уверен, где я ошибаюсь.
Я проверил похожий код, присутствующий на нескольких сайтах, таких как: http://www.inonit.com/cygwin/jni/helloWorld/, но получил похожую ошибку.