如何安装最新版本的 gcc 和 g++?
我正在使用各种 C++11 和 C++1y 功能;这就是我需要这个的原因。
答案1
您可以从 Ubuntu Toolchain PPA 安装接近上游版本的 GCC:https://wiki.ubuntu.com/ToolChain#PPA_packages
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-4.9
在 Ubuntu 14.04 上测试。
答案2
介绍
授人以鱼不如授人以渔等等。
如何以 apt 友好的方式构建源包并从本地存储库提供它。只要依赖关系得到满足,此方法适用于任何发行版/此方法不需要您为每个包安装 build-deps 并用无关的包污染您的机器,这将让您跟上 debian 实验版中更新的包。只需几分钟即可完成一次,然后可以重复使用它来重建您需要的任何包,而无需依赖其他人为您打包 ppa 或下载一堆不同的 .deb
与从 Debian 中提取原始 .debs 相比,构建 .debs 的好处在于,这将针对您的发行版中的软件包构建软件包,而这些软件包的版本/修订版本可能与 Debian 发行版的构建依赖项不同。这或多或少是反向移植软件包的过程。您还可以使用任何 ubuntu 发行版来构建针对任何其他发行版的软件包(在这种情况下,目标意味着针对标准存储库软件包进行构建),没有任何麻烦。
基本如何构建 deb
(不适用于 ppa 上传 - 这有来自 launchpad 的官僚要求
可能需要:(packaging-dev
包括build-essential pubilder ubuntu-dev-tools
其他)
设置 pbuilder(这可让您在 chroot 中构建包,而不会因构建依赖包而污染您的系统)
sudo pbuilder create
,- 如果你想为特定的发行版构建,(pbuilder 使用 chroot 中的构建系统版本)你可以使用
pbuilder-dist [precise/oneric/trusy/etc...] create
获取 Debian 源代码
pull-debian-source gcc-4.9 [4.9.0-6]
特定的 Debian 修订版本是可选的,但如果你想提取实验性/不稳定/测试/稳定修订版本,它会很有用- 你也可以从特定 Ubuntu 发行版中提取将它们作为 deb-src 添加到 sources.list 并使用
sudo apt-get src
构建包
sudo pbuilder build gcc-4.9_4.9.0-6.dsc
- 在下载的文件中有一个
.dsc
文件,对于最新的 gcc 来说,它gcc-4.9_4.9.0-6.dsc
是一个包描述文件。.orig.tar.[gz/xz]
是源 tarball。
创建本地 Apt 存储库
mkdir /convenient/place/for/repo
cp /var/cache/pbuilder/result/* /path/to/repo
- (假设你在 repo 目录中)
apt-ftp archive packages . > Packages
- (实现此目的的众多方法之一)
sudo echo "deb [trusted=yes] file:/local/repo/Packages ./" > /etc/apt/sources.list.d/gcc-repo.list
- 注意,你也可以使用从任何地方下载的 .debs 执行此步骤(跳过步骤 1-3)
安装
apt-get update; apt-get install gcc-4.9 g++-4.9
额外技巧
轻松向后移植依赖项
~/pbuilder
~/pbuilder/precise_local
在构建包时使用自编译包来满足依赖关系。(我已使用文件夹(用于精确的本地包存储库)和(用于钩子脚本)设置了它~/pbuilder/precise_hooks
)
将以下内容添加到您的~/.pbuilderrc
OTHERMIRROR="deb [trusted=yes] file:///home/user/pbuilder/precise_local ./"
BINDMOUNTS="/home/user/pbuilder/precise_local"
HOOKDIR="/home/user/pbuilder/precise_hooks"
EXTRAPACKAGES="apt-utils"
在precise_hooks
创建一个文件时D05local
(在典型的 unix/linux 方式中,前缀D
告诉脚本何时被钩住05
是自我强加的名称排序,并且local
只是名称,如果你只有一个钩子,那么它叫什么并不重要,只要D
前缀
该脚本只有一行
(cd /home/user/pbuilder/precise_local ; apt-ftparchive packages . > Packages)
现在,放入的任何软件包都precise_local
将满足构建依赖项。当反向移植具有也需要反向移植的依赖项的软件包时,这对于在本地构建依赖关系树非常有用
VM 解决方案
为了以更干净的方式执行此操作,请使用 VM 映像或 LXC 容器来封锁这个混乱局面。
应用自定义补丁
你可以在大多数 Debian 软件包中使用自定义补丁quilt
,quilt 补丁可以使用来自大多数 VCS 的差异(参见:使用被子)
还有一个额外的步骤,您必须重建.dsc
和.debian.tar.gz
。我所知道的最干净的方式是bzr-builddeb
它具有最高的成功率(与 git-build-package 和其他帮助脚本相比)并且比debuild
直接调用更干净(bzr
= bazaar canonical 的 VCS)
sudo apt-get install bzr-builddeb
- (假设
.orig.tar.gz
被提取并被.debian.tar.gz
提取并放置在其中bzr init
bzr add
bzr commit
- (选修的)
- 调整
debian/changelog
- 添加补丁
debian/patches/
并进行修改debian/patches/series
(quilt 还具有添加补丁或供您即时修改的实用程序,请参阅文档) bzr add debian/
bzr commit
- 调整
bzr builddeb -- -S -us -uc
这将重建源文件并且使其保持未签名状态(PPA/distro 上传需要 gpg 签名,但私人本地存储库不需要)cd ../build-area/
从上面的步骤3继续。
这里的 1-4 步基本上就是你需要上传到 PPA 的内容(它们不接受二进制文件),但你还需要一些步骤来满足启动板的官僚机构(这回答提供解释,这其中一个有一些链接)
答案3
安装
sudo su -
apt-get install build-essential
add-apt-repository ppa:ubuntu-toolchain-r/test
apt-get update
apt-get install gcc-4.9 g++-4.9 cpp-4.9
之后如果你检查 gcc 的版本,你会发现旧版本
gcc --version
所以我们可以用简单的符号来修复它
cd /usr/bin
rm gcc g++ cpp
ln -s gcc-4.9 gcc
ln -s g++-4.9 g++
ln -s cpp-4.9 cpp
或者
您可以使用更新update-alternatives
// 实际上我尝试了符号并且我知道这会起作用但是你可以使用符号来获得它而不会出现问题 // 如果我错了请纠正我
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 40 --slave /usr/bin/gcc gcc /usr/bin/gcc-4.9
update-alternatives --config gcc
update-alternatives --install /usr/bin/cpp cpp /usr/bin/cpp-4.9 40 --slave /usr/bin/cpp cpp /usr/bin/cpp-4.9
update-alternatives --config cpp
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9
update-alternatives --config g++
或者
你可以直接用/usr/bin/gcc4.9 filename.c
gcc-4.9 就像 gcc-4.8“ubuntu 14.04 gcc”,没有太大区别
答案4
目前(20141102)添加 PPA 并调用上述命令apt-get install gcc-4.9 g++-4.9 cpp-4.9
将打印出大量建议的软件包。除了 libvtv0-dbg(存在依赖冲突)外,请安装所有软件包:
apt-get install gcc-4.9 g++-4.9 cpp-4.9 gcc-4.9-locales g++-4.9-multilib libstdc++6-4.9-dbg gcc-4.9-multilib libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan1-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg libcilkrts5-dbg libquadmath0-dbg lib32stdc++6-4.9-dbg libx32stdc++6-4.9-dbg
(如果您对 -dbg 包不感兴趣,请跳过它们),然后执行apt-get dist-upgrade --auto-remove
。最后一步基本上会用 gcc-4.9 替换您的 gcc-4.8(但不会卸载旧版本),并同时引入最新的 fortran 编译器。