C jni.h和预期的‘=’‘’‘’‘;asm&x2019;或‘__属性’;在‘之前;无效’;
我的工作环境是mac OSX 10.8.3 现在我正在测试JNI 我制作了HelloJNI.java文件,并在终端中执行javac和javah命令 所以我得到了HelloJNI.java、HelloJNI.class、org_owls_jni_HelloJNI.h文件 然后我把C jni.h和预期的‘=’‘’‘’‘;asm&x2019;或‘__属性’;在‘之前;无效’;,c,macos,syntax,java-native-interface,header-files,C,Macos,Syntax,Java Native Interface,Header Files,我的工作环境是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 命令来运行程序。并面
gcc -g -l/usr/local/java/include -l/usr/local/java/include/linux -shared HelloJNI.c -o libhello.so
命令来运行程序。并面临2条错误消息
/* 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
/*不要编辑此文件-它是机器生成的*/
#包括
/*类org_owls_jni_HelloJNI的标题*/
#ifndef包括组织猫头鹰jni HelloJNI
#定义包含组织猫头鹰jni HelloJNI
#ifdef_uucplusplus
外部“C”{
#恩迪夫
/*
*类别:org_owls_jni_HelloJNI
*方法:printMessage
*签字:()五
*/
JNIEXPORT void JNICALL Java_org_owls_jni_HelloJNI_printMessage
(JNIEnv*,jobject);
#ifdef_uucplusplus
}
#恩迪夫
#恩迪夫
我认为这里没有问题,因为它是由javah命令自动生成的
非常感谢您在advanced中的建议。您的第一个错误是因为您没有
jni.h
,就这么简单。你必须找出它在哪里,并确保它在你的包含路径上
顺便说一句,这是在gcc
中用-I
(大写字母)而不是-l
(小写字母)。后者用于指定要使用的库,而不是要添加到包含路径的目录。那就是,我相信,你在这里的具体问题
第二个错误是由第一个错误引起的,这是因为在void
之前,您在:
JNIEXPORT void JNICALL Java_org_owls_jni_HelloJNI_printMessage
毫无疑问,由于缺少
jni.h
您是否看到jni.h:没有这样的文件或目录
?在/usr/local/include的/usr/include中没有jni.h
文件,这是程序所必需的。是的,似乎你是对的。我用大写字母I代替了小写字母el。错误代码已更改。只要我检查第一个(jni.h事件)。我会选择你的答案。非常感谢你的教学。