【发布时间】:2012-01-14 20:16:27
【问题描述】:
我刚刚进入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;
}
我在 Cygwin 中使用“gcc -Wl,--add-stdcall-alias -shared -o HelloWorld.dll HelloWorld.c”创建了 .dll
即使我使用普通的Linux创建共享库的方法:“gcc -shared -Wl,-soname,libHelloWorld.so -o libHelloWorld.so HelloWorld.o”
但是当我运行 java HelloWorld 时,它返回 Aborted!
由于我对 Java 没有太多了解,我不确定我哪里出错了。
我检查了几个网站中存在的类似代码,例如:http://www.inonit.com/cygwin/jni/helloWorld/,但得到了类似的错误。
【问题讨论】:
标签: java-native-interface cygwin