如何编译和运行GCC 4.9.x?

7
我正在运行Debian Wheezy,想将GCC 4.7.2升级到GCC 4.9.0。根据这些说明,我安装了libgmp-devlibmpfr-devlibmpc-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目录? - Joachim Isaksson
很多事情都非常有趣:1)为什么你要在4.6.2目录中安装4.9.0? :-) 2)为什么你使用$PWD/../xyz而不是../xyz?你会在$HOME/gcc<nice-version>/bin/中找到可执行文件。 - Klaus
@Klaus 所有这些东西都已经解释过了。我安装到了4.9.0,但我真的不知道为什么他们使用了 $PWD,但它运行得很好。我能否以某种方式确保当我键入 g++ 时,它指向我的新安装而不是随 Debian 附带的 gcc? - quant
1
根据你使用的 shell(bash?),你可以编辑 ~/.bashrc 文件。在末尾添加一行:export PATH=/<your home>/gcc-<your gcc version>/bin:$PATH。现在你启动一个新的 shell 并输入 gcc --version。这应该是新版本。 - Klaus
请注意:您只需要安装 libgmp-devlibmpfr-devlibmpc-dev 包,或者运行 contrib/download_prerequisites 脚本。我认为 GCC 维基页面已经很清楚了:“或者,在提取 GCC 源代码存档后,只需在 GCC 源目录中运行 ./contrib/download_prerequisites 脚本即可。” - Jonathan Wakely
另外,当使用新的 g++ 时,请确保阅读并理解 http://gcc.gnu.org/onlinedocs/libstdc++/faq.html#faq.how_to_set_paths。 - Jonathan Wakely
1个回答

7

在执行这些命令后(请注意configure的--prefix选项)

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

新的GCC将安装在$HOME/gcc-4.9.0目录中(其中应该有子目录,如binlibshare)。 gcc的完整路径将是$HOME/gcc-4.9.0/bin/gcc,而g++(它是指向gcc的符号链接)将在这里: $HOME/gcc-4.9.0/bin/g++
objdir中可能没有单独的g++,因为gcc编译器驱动程序实现了几种语言的驱动程序;根据argv[0](用于运行驱动程序的二进制文件的名称:gccg++;此模式还会影响链接标志)和源文件扩展名(gcc接受C和C++程序作为编译成目标文件的输入),选择模式(C或C++)。所以,g++可能被make install生成为符号链接,并且存储生成的符号链接的位置是$prefix/bin
在构建GCC并将其安装在$HOME/gcc-4.9.0目录中后,您可以使用它;但默认系统gcc将不会更新。发行版gcc的更新应该通过发行版工具(如aptdpkg-build等)来完成。当前的系统范围gcc的预构建版本分别是Wheezy的4.7.2,Jessie和Sid的4.8.2以及"Experimental"的4.9-2

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接