如何在 JNI 代码中包含 cspi/spi.h 头文件?

How to include cspi/spi.h header file in JNI code?

我试图在 JNI C 代码中包含 spi.h 头文件,当 /usr/include/at-spi-1.0/cspi/spi.h 文件包含在 c 代码中我收到以下致命错误,如“fatal error: cspi/spi.h: No such file or directory”.

为了创建“.so”文件,我使用了如下命令:

sudo gcc -shared -fPIC -o libHelloJNI.so -I/usr/lib/jvm/java-7-openjdk-amd64/include  -I/usr/lib/jvm/java-7-openjdk-amd64/include/linux  -I/usr/include/at-spi-1.0/cspi  HelloJNI.c

使用“-I”我成功包含了 JNI.h 头文件,但是当我尝试包含 /usr/include/at-spi-1.0/cspi/spi.h, file 我得到了 No such file or directory 的致命错误。

所以请查看以下代码并提供您的反馈!

#include<jni.h>
#include<cspi/spi.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"HelloJNI.h" 

// Implementation of native method sayHello() of HelloJNI class
   JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, 
                                      jobject thisObj,jint a) 
   {
       printf("Hello World! %d\n",a);
       return;
   }

   JNIEXPORT void JNICALL JAVA_HelloJNI_initSPI(JNIEnv *env, jclass 
                                               cls)
   {

      int init_error;
      init_error = SPI_init();
      putenv("GTK_MODULES=gail:atk-bridge");
      putenv("GNOME_ACCESSIBILITY=1");

      if(init_error)
      {     
               printf("First time error %d in Initialising 
                      SPI\n",init_error);   
      }
      else
      {
                printf("SPI Initialise successfully");
      }
           SPI_event_main();
           return;
  }

如果您在 #include 指令中指定 cspi/spi.h,则在 -I 开关中不需要 cspi

改为:

-I/usr/include/at-spi-1.0/