编程语言 · 2023年 10月 26日 0

搜索路径

56 次浏览

不同路径存在相同的头文件,头文件搜索也有自己的规则。库文件同样有类似搜索路径问题。

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等)。