安装在 /usr/local 以外时 gcc 的默认标头路径

Posted

技术标签:

【中文标题】安装在 /usr/local 以外时 gcc 的默认标头路径【英文标题】:Default header path of gcc when innstalled in other than /usr/local 【发布时间】:2013-09-13 13:42:43 【问题描述】:

我想在我的 Linux 系统上安装最新的 gcc 来编译 C++11 代码。目前我们正在考虑将其安装在默认位置以外的位置,例如/home/user1/newgcc

为此,我将使用 --prefix=/home/user1/newgcc 选项构建它。但是 AFAIK,编译器会在 /usr/local/include/usr/include 等中查找头文件。由于它将安装在我的本地目录中,我该如何强制它查看 /home/user1/newgcc/include 等中的头文件?

在构建带有前缀选项的 gcc 时,这条路径会被硬编码吗?

【问题讨论】:

是的,--prefix 负责处理。 【参考方案1】:

从查看 gcc/g++ 配置options 看来,--prefix 选项用于控制构建工件的***安装目录。如果要指定/home/user1/newgcc/include 以外的目录,可以使用--with-local-prefix 选项。但总的来说,--prefix 参数会明智地初始化所有后续路径参数。

【讨论】:

【参考方案2】:

如果您的机器上有多个用户,则不应将编译器安装到用户本地目录。如果你这样做了,当动态链接器尝试从用户本地路径获取库并且其他用户无权访问该目录时,你会遇到问题。

通常,附加软件应安装在系统的 /opt 中。为此,我们使用 /opt/gcc-version/... 并且我们的构建盒上有很多旧的编译器。在编译你的源代码时,编译器知道在哪里可以找到合适的头文件。

但是:

当您稍后在系统上运行您的 progs 时,您可能无法找到正确的动态库。您必须将它们添加到您的 ld.config 系统中。有时是一个文件,有时是一个包含很多子文件夹的目录。只需查看您的 ld.config 手册页即可了解该主题。

【讨论】:

以上是关于安装在 /usr/local 以外时 gcc 的默认标头路径的主要内容,如果未能解决你的问题,请参考以下文章

arm-linux-gcc等交叉编译工具的安装

gcc 9.2.0 编译安装mysql 8.0.17

ubuntu11 安装交叉编译 arm-linux-gcc 4.4.3出现崩溃型问题,希望高手相助。

安装交叉工具链arm-linux-gcc

Centos 安装 arm-linux-gnueabihf-gcc (armcc交叉工具链)

CentOS 7 安装Redis