首页 > 解决方案 > gcc 所指的“标准系统目录”是什么?(在类似unix的系统上)

问题描述

我一直在探索编译器和交叉编译器。我正在阅读 GCC 手册。具体来说,我对手册中有以下陈述有疑问:

链接器在标准目录列表中搜索库。搜索的目录包括几个标准系统目录以及您使用 -L 指定的任何目录。

-isystem 和 -idirafter 选项还将目录标记为系统目录,以便它获得与标准系统目录相同的特殊处理。

好的,这些“系统目录”是什么?在 Linux 机器上,本机编译器的系统目录是什么?

如果我构建了一个交叉编译器(就像这里显示的那样:https ://wiki.osdev.org/GCC_Cross-Compiler ),关于这个编译器的“系统目录”是什么?

构建 GCC 时可以更改系统目录吗?此外,sysroot 在哪里出现?

标签: clinuxgccosdevbinutils

解决方案


“标准”系统目录不是特定目录 - 它可能因安装/发行版而异。

gcc有一个选项-print-search-dirs。使用它可以获取目录列表,它会查找。

就像是:

gcc -print-search-dirs | grep libraries | sed 's/libraries: =//g' | tr ':' '\n' | xargs readlink -f 

交叉编译器也是一样的(你会调用交叉编译器的前端而不是 plain gcc)。

--sysroot是直截了当的:

--sysroot=dir 使用 dir 作为头文件和库的逻辑根目录。例如,如果编译器通常在 /usr/include 中搜索头文件,在 /usr/lib 中搜索库,则它会搜索 dir/usr/include 和 dir/usr/lib。

如果同时使用此选项和 ​​-isysroot 选项,则 --sysroot 选项适用于库,但 -isysroot 选项适用于头文件。

GNU 链接器(从 2.16 版开始)对此选项具有必要的支持。如果您的链接器不支持此选项,则 --sysroot 的头文件方面仍然有效,但库方面不支持。


推荐阅读