Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C jni.h和预期的‘=’‘’‘’‘;asm&x2019;或‘__属性’;在‘之前;无效’;_C_Macos_Syntax_Java Native Interface_Header Files - Fatal编程技术网

C jni.h和预期的‘=’‘’‘’‘;asm&x2019;或‘__属性’;在‘之前;无效’;

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 命令来运行程序。并面

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

  • h:没有这样的文件或目录
  • 应为“=”、“、”、“;”、”“void”之前的asm“或”属性
  • 我搜索了互联网,找到了一个解决方案,上面写着将我的jdk升级到1.7。但我不能这样做,因为其他人使用1.6。因此,我需要另一个解决方案来处理JDK1.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
    
    /*不要编辑此文件-它是机器生成的*/
    #包括
    /*类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事件)。我会选择你的答案。非常感谢你的教学。