gpt4 book ai didi

c - jni.h 和预期 ‘=’ , ‘,’ , ‘;’ , ‘asm’ 或 ‘__attribute__’ 之前 ‘void’

转载 作者:太空宇宙 更新时间:2023-11-04 02:57:00 29 4
gpt4 key购买 nike

我的工作环境是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 条错误消息。

  1. jni.h: 没有那个文件或目录
  2. 在“void”之前需要“=”、“,”、“;”、“asm”或“attribute

我在互联网上搜索并找到了一个解决方案,上面写着将我的 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命令自动生成的。

非常感谢您提前提出的建议。

最佳答案

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

顺便说一下,这是在 gcc 中使用 -I(大写的 eye)完成的,而不是 -l(小写的 ell ).后者用于指定要使用的,而不是要添加到包含路径的目录。也就是说,我相信,您的具体问题在这里。

第二个错误是由第一个错误引起的,这是因为您在 void 之前有这个未知标记:

JNIEXPORT void JNICALL Java_org_owls_jni_HelloJNI_printMessage

毫无疑问是因为缺少jni.h

关于c - jni.h 和预期 ‘=’ , ‘,’ , ‘;’ , ‘asm’ 或 ‘__attribute__’ 之前 ‘void’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16208513/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com