【问题标题】:How do I compile and run GCC 4.9.x?如何编译和运行 GCC 4.9.x?
【发布时间】:2014-04-26 14:08:20
【问题描述】:

我正在运行 debian wheezy,想从 GCC 4.7.2 升级到 GCC 4.9.0。

根据these instructions,我安装了libgmp-dev、libmpfr-dev 和libmpc-dev(我的包管理器分别给了我版本 2:5.0.5+dfsg-2、3.1.0-5 和 0.9-4)和运行以下代码来编译 gcc(请注意,在我的情况下它是 4.9.0 而不是 4.6.2):

tar xzf gcc-4.6.2.tar.gz
cd gcc-4.6.2
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
$PWD/../gcc-4.6.2/configure --prefix=$HOME/gcc-4.6.2 
make
make install

我现在有一个 objdir 目录,里面塞满了东西,但是 g++ 在哪里,我应该把这个目录放在哪里?

我猜我应该把它移到 usr/local 并添加一些东西到我的 PATH 变量中,但我不知道究竟是什么,以及如何确保在我的旧 gcc 安装之前搜索它。

【问题讨论】:

  • 没有在您的主目录中显示包含二进制文件的gcc-4.9.0 目录?
  • 很多东西很有意思:1)为什么要在4.6.2目录下安装4.9.0? :-) 2. 为什么你使用 $PWD/../xyz 而不是 ../xyz ?您将在 $HOME/gcc/bin/ 中找到可执行文件
  • @Klaus 所有这些都已经解释过了。我将它安装到 4.9.0,我真的不知道他们为什么使用$PWD,但它工作正常。我能否以某种方式确保当我输入 g++ 时它指向我的新安装而不是 debian 附带的 gcc?
  • 根据您的 shell(bash?),您可以编辑 ~/.bashrc 文件。在末尾添加一个新行:export PATH=/<your home>/gcc-<your gcc version>/bin:$PATH。现在你启动一个新的 shell 并输入gcc --version。这应该是新的。
  • 注:您只需要要么安装libgmp-dev、libmpfr-dev和libmpc-dev软件包或运行contrib/download_prerequisites脚本。我认为 GCC wiki 页面清楚地说明了这一点:“或者,在提取 GCC 源存档后,只需在 GCC 源目录中运行 ./contrib/download_prerequisites 脚本。”跨度>

标签: gcc gcc4.9


【解决方案1】:

执行这些命令后(注意配置的--prefix 选项)

$PWD/../gcc-4.9.0/configure --prefix=$HOME/gcc-4.9.0 
make install

新的gcc将安装在$HOME/gcc-4.9.0目录下(里面应该有bin、lib、share等子目录)。

gcc 的完整路径将是 $HOME/gcc-4.9.0/bin/gcc,g++(这是 gcc 的符号链接)将在此处:$HOME/gcc-4.9.0/bin/g++。

objdir 中不能有单独的g++,因为gcc 编译器驱动程序实现了多种语言的驱动程序;模式(C 或 C++)基于argv[0](用于运行驱动程序的二进制名称:gcc 或g++;此模式也影响链接标志)和源文件扩展名(gcc接受 C 和 C++ 程序作为编译成目标文件的输入)。所以,g++ 可能会被make install 生成为符号链接,而存储生成的符号链接的位置是$prefix/bin。

编译好GCC并安装到$HOME/gcc-4.9.0目录后,就可以使用了;但默认系统 gcc 不会更新。分布式 gcc 的更新应通过分布式工具(apt、dpkg-build 等)完成。 Wheezy 的系统范围 gcc 的当前预构建版本是 4.7.2,Jessie 和 Sid 的 4.8.2 和“实验”的 4.9-2。

【讨论】:

  • 所以我不能替换g++ 命令以某种方式指向这个新的二进制文件?每次我想运行 g++ 时都必须手动指向该目录吗?
  • 您可以更改自己的 $PATH 环境变量,将新目录添加到 /usr/bin 的左侧。例如,你是否使用 bash,在~/.bashrc 文件中添加:export PATH=~/gcc-4.9.0/bin:$PATH。然后打开新终端进行检查。
  • @osgx:感谢您提供有关安装和使用 gcc-4.9.0 的详细信息。我可以在我的 GNU/Linux 终端上安装和使用最新的 gcc/g++,就像这篇 SO 帖子中提到的步骤一样。但是我想知道我是否可以安全地删除 $HOME/objdir 目录?我的机器上有大约 3.3GB 大小。
  • Mantosh Kumar,是的,安装后(make install)可以删除项目构建的目录,没有依赖。这里唯一有用的信息是“config.log”文件(它有所有configure选项的副本和实际启用的功能列表)和目录列表(ls -l,因为可以将gcc、gdb、binutils合并到单个 srcdir/objdir 并使用一个 configure 来获取它们)。就我个人而言,我总是从所有构建目录(objdirs)中保存config.log 和文件列表,它们有助于重新制作项目(例如,当 gcc 的下一个次要版本可用时)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 2023-03-18
  • 2011-03-24
  • 2015-01-22
相关资源
最近更新 更多