我的工作环境是 mac OSX 10.8.3。
现在我正在测试 JNI。
我制作了 HelloJNI.java 文件并在终端中执行 javac 和 javah 命令。
所以我得到了 HelloJNI.java、HelloJNI.class、org_owls_jni_HelloJNI.h 文件。
然后我把
gcc -g -l/usr/local/java/include -l/usr/local/java/include/linux -shared HelloJNI.c -o libhello.so
命令运行程序。并面临 2 条错误消息。
- jni.h:没有这样的文件或目录
- 'void' 之前应有 '='、','、';'、'asm' 或 '<strong>attribute'</li>
我搜索了互联网并找到了一个解决方案,将我的 jdk 升级到 1.7。但我不能这样做,因为其他人使用 1.6。所以我需要另一种解决方案来处理 jdk 1.6 的这个问题。
对于第二个问题,我在 stackoverflow 中找到了一些文章。他们说他们缺少一些语法。但对我来说,在void之前我找不到任何问题。请看一下我的头文件。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_owls_jni_HelloJNI */
#ifndef _Included_org_owls_jni_HelloJNI
#define _Included_org_owls_jni_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_owls_jni_HelloJNI
* Method: printMessage
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_owls_jni_HelloJNI_printMessage
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
我认为这里没有问题,因为它是由命令 javah 自动生成的。
我非常感谢您提前提出的建议。