不同路径存在相同的头文件,头文件搜索也有自己的规则。库文件同样有类似搜索路径问题。
GCC头文件
GCC编译C代码,根据是""或<>方式不同,头文件路径搜索顺序有差异。
- ""
- 被编译的源代码文件所在当前目录
- -iquote指定的路径(只用于引号括起来头文件,如多个路径,从左到右依次搜索)
- -I指定的路径(如多个路径,从左到右依次搜索)
- -isystem指定的路径(如多个路径,从左到右依次搜索)
- 标准系统头文件路径
- -idirafter指定的路径(如多个路径,从左到右依次搜索)
- <>
- -I指定的路径(如多个路径,从左到右依次搜索)
- -isystem指定的路径(如多个路径,从左到右依次搜索)
- 标准系统头文件路径
- -idirafter指定的路径(如多个路径,从左到右依次搜索)
有兴趣的可以写多个不同路径的相同名称头文件,用""或<>测试上面的顺序,可以一一验证。比较有趣的是,即使是系统头文件<stdio.h>, 也可以改成"stdio.h", 这样就遵循上面""的搜索顺序,可以达到覆盖系统头文件的效果。
MSVC头文件
- ""
- 源代码所在目录
- /I 指定的路径
- 标准系统头文件路径
- <>
- /I 指定的路径
- 标准系统头文件路径
GCC库文件
库文件不像头文件那样有这么多分类:
- -L参数
- LIBRARY_PATH或LD_LIBRARY_PATH
- /etc/ld.so.conf路径
- 系统默认的库路径(如/lib, /usr/lib等)。