代码之家  ›  专栏  ›  技术社区  ›  Frank V

其中包括存储的文件-ubuntu linux,gcc

  •  64
  • Frank V  · 技术社区  · 15 年前

    因此,当我们执行以下操作时:

    #include <stdio.h>
    

    对战

    #include "myFile.h"
    

    在我的例子中,编译器gcc知道stdio.h(甚至对象文件)在硬盘上的位置。它只是利用文件,没有我的交互作用。

    认为 在我的Ubuntu Linux机器上,文件存储在 /usr/include/ . 编译器如何知道在哪里查找这些文件? 这是可配置的还是只是预期的默认值?我在哪里可以找到这个配置?

    既然我在问关于这些包含文件的问题,那么这些文件的来源是什么?我知道这在Linux社区可能是模糊的,但谁来管理这些呢?谁将为Windows编译器提供和管理相同的文件?

    我总是觉得他们 但这只是一个假设…

    4 回复  |  直到 7 年前
        1
  •  41
  •   Karl Voigtland    15 年前

    请参见这里: Search Path

    总结:

    #include <stdio.h>
    

    当include文件位于括号中时,预处理器首先在通过 -我 旗帜。然后它搜索标准包含路径(请参见上面的链接,并使用 -V 在系统上测试的标志)。

    #include "myFile.h"
    

    当include文件用引号括起来时,预处理器首先在当前目录中搜索,然后搜索由指定的路径 -引文 然后 -我 路径,然后是标准路径。

    -诺斯顿公司 可以用来阻止预处理器搜索标准路径。

    Environment variables 也可用于添加搜索路径。

    编译时,如果使用 -V 标记您可以看到使用的搜索路径。

        2
  •  42
  •   Alex Martelli    15 年前

    GCC是一个丰富而复杂的“协调”程序,它调用许多其他程序来履行其职责。为了观察 #include "goo" #include <zap> 我建议您在系统上搜索:

    $ touch a.c
    $ gcc -v -E a.c
     ...
    #include "..." search starts here:
    #include <...> search starts here:
     /usr/local/include
     /usr/lib/gcc/i686-apple-darwin9/4.0.1/include
     /usr/include
     /System/Library/Frameworks (framework directory)
     /Library/Frameworks (framework directory)
    End of search list.
    # 1 "a.c"
    

    这是查看包含文件的搜索列表的一种方法,包括(如果有)目录 #include "..." 会看但是 #include <...> 不会的。我显示的这个特定列表实际上在Mac OS X(aka Darwin)上,但是我推荐的命令将显示搜索列表(以及我替换为的有趣的配置详细信息)。 ... 这里;-)在GCC正常运行的任何系统上。

        3
  •  9
  •   Meredith L. Patterson    15 年前

    卡尔回答了你的搜索路径问题,但就“文件来源”而言,有一点需要注意,如果你安装了 libfoo 打包并想用它做一些开发(即使用它的头文件),您还需要安装 libfoo-dev . 标准库头文件已经在 /usr/include ,正如你看到的。

    请注意,一些具有大量头的库将把它们安装到子目录中,例如, /usr/include/openssl . 要包含其中一个,只需提供不包含 /包括/包括 零件,例如:

    #include <openssl/aes.h>
    
        4
  •  2
  •   Chandrahas Aroori roarc    7 年前

    这个 \#include GCC文件存储在 /usr/include . G++的标准包含文件存储在 /usr/include/c++ .