我刚刚进入Java世界。当我尝试编译从 Java 调用 C 的示例程序时,我遇到了问题。
我想尝试 JNI 的示例代码(在 SUN-Micro 的 JNI.PDF 中给出)。
代码是这样的:
class HelloWorld {
private native void print();
public static void main(String[] args) {
new HelloWorld().print();
}
static {
System.loadLibrary("HelloWorld");
}
}
我使用 javac HelloWorld.java 进行编译,然后使用“javah -jni HelloWorld”获得 C 程序的 .H 文件
即使我的 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;
}
我使用“gcc -Wl,--add-stdcall-alias -shared -o HelloWorld.dll HelloWorld.c”在 Cygwin 中创建了 .dll
即使我使用普通的 Linux 方法创建共享库:“gcc -shared -Wl,-soname,libHelloWorld.so -o libHelloWorld.so HelloWorld.o”
但是当我运行 java HelloWorld 时,它返回 Aborted!
由于我对 Java 不太了解,所以我不确定我哪里出错了。
我检查了一些网站中存在的类似代码,例如:http://www.inonit.com/cygwin/jni/helloWorld/但出现类似的错误。
最佳答案
我无法让 JNI
与 Cygwin 的 g++
一起使用——这会导致对 cygwin1.dll
的依赖,这与JNI机制
,导致崩溃。不再支持 -mno-cygwin 标志
。但使用 /bin/x86_64-w64-mingw32-g++.exe
为我解决了这个问题。
关于java-native-interface - 在 Cygwin 上使用 Java/JNI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8413290/