gcc在用-I指定的目录中找不到文件

gcc在用-I指定的目录中找不到文件,c,gcc,C,Gcc,我需要在以下目录中包含一些特定于平台的jni文件: $ ls -l /home/ubuntu/jdk8/include/linux total 8 -rw-r--r-- 1 ubuntu ubuntu 995 Mar 15 09:00 jawt_md.h -rw-r--r-- 1 ubuntu ubuntu 824 Mar 15 09:00 jni_md.h 因此,gcc命令被适当地(?)扩充: gcc -I"/home/ubuntu/jdk8/include/linux" -I"$JAVA_

我需要在以下目录中包含一些特定于平台的jni文件:

$ ls -l /home/ubuntu/jdk8/include/linux
total 8
-rw-r--r-- 1 ubuntu ubuntu 995 Mar 15 09:00 jawt_md.h
-rw-r--r-- 1 ubuntu ubuntu 824 Mar 15 09:00 jni_md.h
因此,
gcc
命令被适当地(?)扩充:

gcc -I"/home/ubuntu/jdk8/include/linux" -I"$JAVA_HOME/include" ..
但是找不到
linux
子目录中的文件:

gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.4)
COLLECT_GCC_OPTIONS='-I' '"/home/ubuntu/jdk8/include/linux"' '-I' '/home/ubuntu/jdk8/include' ..


/home/ubuntu/jdk8/include/jni.h:45:20: fatal error: jni_md.h: No such file or directory
那么这里需要调整什么呢?如果重要的话,这是在
ubuntu
16.0.4`和

gcc --version
gcc (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
Update以下是
jni.h

#include "jni_md.h"  
现在,他们怎么能期望找到它——难道不是吗

#include <jni_md.h>
#包括
根据
Arkadiusz Drabczyk
更新
和他提供的链接,他们都应该可以。事实上,行为似乎是一样的

注意如果我将
include/linux/*.h
下的文件复制到父级
include
目录下,编译工作就会进行:因此唯一的问题是include路径


YAU(又一次更新)根据Arkadiusz,我尝试了
clang
:同样的错误

目录字符串可能需要一个尾随斜杠,但不太可能。jni.h是包含还是“jni_md.h”?

它可能需要在目录字符串上添加一个尾随斜杠,但可能性不大。jni.h包括还是“jni_md.h”?

结果是选项的顺序搞乱了:我有

-I<something> -odmaserver.so  -I<something else>
-I-odmaserver.so-I
这是必须的

-I<something> -I<something else>  -odmaserver.so  
-I-I-odmaserver.so
结果是选项顺序混乱:我有

-I<something> -odmaserver.so  -I<something else>
-I-odmaserver.so-I
这是必须的

-I<something> -I<something else>  -odmaserver.so  
-I-I-odmaserver.so

您所说的是gcc的参数和gcc报告的不同之处。请验证您提供的确切参数。@rici它们有什么不同?这里我唯一能看到的是bash将
$JAVA_HOME
翻译成
/HOME/ubuntu/jdk8
@javadba:你能用
clang
来代替它吗?或者另一个版本的
gcc
?@ArkadiuszDrabczyk这是在ubuntu上-所以没有
clang
,至少默认情况下是这样?它可能不是默认安装的,但我相信一个
apt get install
就可以完成这项工作了?你说的是gcc的参数,而gcc的报告是不同的。请验证您提供的确切参数。@rici它们有什么不同?这里我唯一能看到的是bash将
$JAVA_HOME
翻译成
/HOME/ubuntu/jdk8
@javadba:你能用
clang
来代替它吗?或者另一个版本的
gcc
?@ArkadiuszDrabczyk这是在ubuntu上-所以没有
clang
至少在默认情况下?它可能不会在默认情况下安装,但我相信一个
apt-get-install
就可以完成这项工作了吗?在
-I
选项中不需要后面的斜杠。
标题名之间的区别仅仅是默认的搜索路径。在
-I
选项中不需要后面的斜杠。
标题名之间的区别仅仅是默认的搜索路径。