2013-04-25 83 views
1

我的工作环境“__attribute__”是MAC OSX 10.8.3。jni.h和预期“=”,“”,“”,“ASM”或之前“无效”

现在我正在测试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个错误消息。

  1. jni.h:预期 '=' 没有这样的文件或目录
  2. , ' ' ';',前 '无效'

'ASM' 或' 属性'我搜索了互联网,并找到了一个解决方案,说升级我的jdk到1.7。但我不能这样做,因为其他人使用1.6。所以我需要另一个解决方案来处理jdk 1.6的这个问题。

对于第二个问题,我在stackoverflow中找到了一些文章。他们说他们错过了一些语法。但对我而言,在无效之前我找不到任何问题。请看看我的头文件。

/* 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自动生成的。

我非常感谢您的高级建议。

+0

你见过'jni.h:没有这样的文件或目录吗?您的/ usr/include/usr/local/include文件中没有'jni.h'文件,这对您的程序是必需的。 – MYMNeo 2013-04-25 07:13:28

回答

2

你的第一个错误是因为你没有一个jni.h做,就这么简单。你必须找出它在哪里,并确保它在你的包含路径中。

而且,顺便说一句,这在gcc-I(大写眼),而不是-l(小写字母)完成。后者用于指定使用而不是目录添加到包含路径。也就是说,我相信,你的具体问题在这里。

第二个错误是由前造成的,那是因为你在void之前有这种未知的令牌:

JNIEXPORT void JNICALL Java_org_owls_jni_HelloJNI_printMessage 

因为缺少jni.h无疑。

+0

是的,看起来你是对的。我用大写字母i代替了较低的字母el。并且错误代码已经改变。只要我检查第一个(jni.h问题)。我会选择你的答案。非常感谢您的善良教学。 – 2013-04-25 08:26:29

相关问题