user-0 提问: 如何查看编译过程中某个头文件的查找路径？

回复:
user: user-0
content: 问题已经解决了。原因是用-I指定的搜索路径顺序对Include_next有影响，导致在搜索include_next指定的头文件时，使用了非编译器路径。  举个例子：  A、B、C三个目录下分别有一个文件：  A/a.h #ifndef A_A_H #define A_A_H  #include "a_aux.h"  #endif  B/a_aux.h #ifndef B_A_AUX_H #define B_A_AUX_H  #include_next "a.h"  #endif  C/a.h #ifndef C_A_H #define C_A_H  #pragma message("1111111111111111111")  #endif  另外有个一个与A、B、C并列的main.c文件： #include "a.h"  int main() { return 0; }  编译命令： gcc main.c -I./A -I./B -I./C ./C/a.h:5: 附注：#pragma message：1111111111111111111 说明B/a_aux.h中#include_next "a.h"，在下一个含有a.h目录C中找到了a.h  编译命令：gcc main.c -I./B -I./A -I./C 无打印，说明B/a_aux.h中#include_next "a.h"没找到C中的a.h，找到的仍然是A中的a.h，因为-I选项指定了A在B目录之后，是B目录的下一个含有a.h文件的目录，于是选择了A中的a.h  从上面的现象看，貌似#include_next并不是从搜索路径列表的第一条开始计算next的基准，而是从当前文件所在目录（上例中的B目录）作为基准找到下一个含有a.h的目录。这好像与#include_next的含义有些不符，还没搞懂。

user: user-1
content: 友情帮顶了，看看再说

user: user-0
content: 增加gettimeofday的声明可以解决找不到声明的warning.  gettimeofday的问题是我遇到的问题之一，是为了说明include_next没有包含到编译器的头文件，其实还有其他问题，例如结构struct timezone，也报找不到定义；  还有MAXPATHLEN找不到定义，这个是定义在编译器的sys/param.h中，项目的一个头文件sys/param_aux.h通过include_next方式包含了编译器的sys/param.h

user: user-2
content: 引用 2 楼 walter2001 的回复:谢楼上回答。我遇到的问题，能查看依赖的所有头文件还不够，最好能知道头文件搜索路径的顺序。 具体问题是项目自己的一个头文件sys/time.h中使用include_next包含了交叉编译器的sys/time.h，但实际编译的时候，并没有包含交叉编译器的sys/time.h文件，导致gettimeofday函数找不到定义。 在你调用gettimeofday的源文件的开头加一句 extern int gettimeofday(struct timeval *, struct timezone *);  试试看。

user: user-0
content: 谢楼上回答。我遇到的问题，能查看依赖的所有头文件还不够，最好能知道头文件搜索路径的顺序。 具体问题是项目自己的一个头文件sys/time.h中使用include_next包含了交叉编译器的sys/time.h，但实际编译的时候，并没有包含交叉编译器的sys/time.h文件，导致gettimeofday函数找不到定义。

user: user-3
content: gcc -M 选项和 -MM选项  [root@JiangWenjie-VM FileTran]# ls byteorder.c  list.c  main.c    protocol.c  recver.c  sender.c  timer.c  types.c byteorder.h  list.h  Makefile  protocol.h  recver.h  sender.h  timer.h  types.h [root@JiangWenjie-VM FileTran]# gcc -MM main.c  main.o: main.c types.h sender.h recver.h [root@JiangWenjie-VM FileTran]# gcc -M main.c  main.o: main.c types.h /usr/include/stdint.h /usr/include/features.h \   /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \   /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h \   /usr/include/bits/wchar.h /usr/include/sys/socket.h \   /usr/include/sys/uio.h /usr/include/sys/types.h \   /usr/include/bits/types.h \   /usr/lib/gcc/i386-redhat-linux/4.1.2/include/stddef.h \   /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \   /usr/include/bits/endian.h /usr/include/sys/select.h \   /usr/include/bits/select.h /usr/include/bits/sigset.h \   /usr/include/bits/time.h /usr/include/sys/sysmacros.h \   /usr/include/bits/pthreadtypes.h /usr/include/bits/uio.h \   /usr/include/bits/socket.h \   /usr/lib/gcc/i386-redhat-linux/4.1.2/include/limits.h \   /usr/lib/gcc/i386-redhat-linux/4.1.2/include/syslimits.h \   /usr/include/limits.h /usr/include/bits/posix1_lim.h \   /usr/include/bits/local_lim.h /usr/include/linux/limits.h \   /usr/include/bits/posix2_lim.h /usr/include/bits/sockaddr.h \   /usr/include/asm/socket.h /usr/include/asm/sockios.h \   /usr/include/arpa/inet.h /usr/include/netinet/in.h \   /usr/include/bits/in.h /usr/include/bits/byteswap.h \   /usr/include/unistd.h /usr/include/bits/posix_opt.h \   /usr/include/bits/confname.h /usr/include/getopt.h /usr/include/fcntl.h \   /usr/include/bits/fcntl.h sender.h recver.h /usr/include/stdio.h \   /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \   /usr/include/gconv.h \   /usr/lib/gcc/i386-redhat-linux/4.1.2/include/stdarg.h \   /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \   /usr/include/stdlib.h /usr/include/alloca.h /usr/include/string.h [root@JiangWenjie-VM FileTran]#