gcc在用-I指定的目录中找不到文件
我需要在以下目录中包含一些特定于平台的jni文件: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_
$ 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
选项中不需要后面的斜杠。
和“
标题名之间的区别仅仅是默认的搜索路径。