【问题标题】:Where are C header files in gcc 7?gcc 7中的C头文件在哪里?
【发布时间】:2020-01-14 09:49:51
【问题描述】:

在具有旧版本 gcc (4.4.7) 的 linux 服务器上,我从源代码构建 gcc 7.4.0 并将其安装在 home 的目录中。

现在我不确定如何使用它。该目录包括一些子目录,一个名为“include”。在其中有一个名为“c++”的文件夹。它包括另一个名为“7.4.0”的文件夹。但是 C 头文件在哪里?安装程序是否将它们安装在不同的位置?编译 C 程序时应该提供哪个地址和-I 选项?

很遗憾,我已经没有 gcc 源目录了。

【问题讨论】:

  • 检查/usr/local/include 否则天堂禁止你改写/usr/include...
  • @DavidC.Rankin,不应该make install 将它们安装在prefix 选项指定的目录中吗?
  • 大多数 C 头文件不是 gcc 的一部分,而是平台 C 库(通常是 glibc)的一部分。如果您正确安装了 gcc,您通常应该使用任何 -I 参数。
  • 您通常不需要安装新版本的 C 库。您的平台提供的版本完全足够,gcc itef 正在使用它。如果需要,您可以安装 glibc,但这可能会很棘手。
  • 是的,他就是这么说的,我应该听懂的。 glibc 是打包头文件和库的第二部分。请注意,一些发行版将其分解为多个包。您将需要与 gcc 7.4 兼容的版本。我想你只需要检查是否有任何版本不兼容。 (请注意您的发行版是针对特定的 glibc 版本编译的——混合可能会导致问题)

标签: linux gcc


【解决方案1】:

但是 C 头文件在哪里?

您可以通过

了解 gcc 对它们的期望

echo '#include <stdio.h>' | gcc -xc - -H -v -fsyntax-only

-v 部分将打印搜索路径,如

#include "..." search starts here:
#include <...> search starts here:
 /home/...
 /usr/local/include
 ...

-H 部分将打印实际使用的头文件:

. /usr/include/stdio.h
.. /usr/include/x86_64-linux-gnu/bits/libc-header-start.h
... /usr/include/features.h
etc.

在编译 C 程序时,我应该为-I 选项提供哪个地址?

C 项目的标头所在的路径(如果它们不在当前目录中)。对于不需要-I 的简单项目:如果两个文件位于同一目录中,则编译module.c 将找到#include "module.h"

指定额外系统头文件路径的正确选项是-isystem,但是安装应该在没有任何进一步黑客攻击的情况下找到系统头文件,即假定的搜索路径必须列在@下987654331@ 并且没有设置-isystem

安装程序是否将它们安装在不同的位置?

libc 实现(如 glibc 或 Newlib)不是 GCC 的一部分,而 C++ 库 libstdc++-v3 由 GCC 托管,并在 GCC 配置为 --enable-languages=c++ 时构建。 C-libraries 和 C-headers 的位置应该通过 configure 来确定。

对于像 Newlib 这样的一些 C 库,GCC 支持树内构建,因此这些目标库将包含在安装中,并且路径设置得当。然而,构建 glibc 要复杂得多。

【讨论】:

    猜你喜欢
    • 2010-09-25
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2023-04-08
    • 2014-11-12
    相关资源
    最近更新 更多