在 Ubuntu 上获取 + 安装 gcc/g++ 4.9?

A T*_*A T 80 package-management gcc g++

如何安装最新版本的 gcc 和 g++?

我正在使用各种 C++11 和 C++1y 特性;这就是为什么我需要这个。

Vla*_*sky 110

您可以从 Ubuntu 工具链 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
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 14.04 上测试。

  • 作为最后一步,我发现有必要将符号链接“/usr/bin/g++”从“/usr/bin/g++-4.8”的目标更改为“/usr/bin/g++-4.9”的目标. ...或保持不变但直接调用`g++-4.9`。最后: std::regex 支持。 (9认同)
  • 但它在 12.04 上对我不起作用:E:无法找到包 gcc-4.9 E:无法通过正则表达式“gcc-4.9”找到任何包 [Looks](https://launchpad.net/~ubuntu- toolchain-r/+archive/ppa) 之类的 12.04 特别不受此存储库支持,即使新版本和旧版本的 Ubuntu 都受支持。 (8认同)
  • 我有 Ubuntu 14.04 但这对我不起作用。你有没有留下一步?我在 https://launchpad.net/~ubuntu-toolchain-r/+archive/test 中没有看到 g++-4.9 (3认同)
  • @DavidO - 您应该能够使用替代系统来避免直接编辑符号链接。请参阅 http://askubuntu.com/q/26498/5682。 (3认同)

cra*_*sic 43

介绍

教人钓鱼等等。

如何构建源包并以友好的方式从本地存储库提供它。只要可以满足依赖关系,这将适用于任何发行版/此方法不需要您为每个软件包安装 build-deps 并用无关的软件包污染您的机器,这将使您能够在软件包在 debian Experiment 中更新时跟上它们. 只需几分钟即可完成一次,然后可以重复使用以重建您需要的任何包,而无需依赖其他人为您打包 ppa 或下载一堆不同的 .debs

构建与从 debian 中提取原始 .debs 的好处在于,这将针对您的发行版中的软件包构建软件包,这些软件包的版本/修订版可能与 debian 发行版的构建依赖项不同。这或多或少是向后移植包的过程。您还可以使用任何 ubuntu 发行版轻松构建针对任何其他发行版的包(在这种情况下,目标是指针对标准存储库包构建)。

基本如何构建 deb

(不适用于 ppa 上传 - 这对启动板有官僚主义要求

也许,需要:packaging-dev(拉build-essential pubilder ubuntu-dev-tools等)

  1. 设置 pbuilder(这可以让你在 chroot 中构建一个包,而不会用构建依赖包污染你的系统)

    • sudo pbuilder create,
    • 如果您想为特定发行版构建,(pbuilder 在 chroot 中使用构建系统版本)您可以使用 pbuilder-dist [precise/oneric/trusy/etc...] create
  2. 获取 debian 源

    • pull-debian-source gcc-4.9 [4.9.0-6] 特定的 debian 修订版是可选的,但如果你想拉出实验/不稳定/测试/稳定修订版,它会很有用
    • 您还可以通过将特定 ubuntu 发行版添加到 sources.list 作为 deb-src 并使用sudo apt-get src
  3. 构建包

    • 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。
  4. 创建本地 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)
  5. 安装

    • 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"
Run Code Online (Sandbox Code Playgroud)

precise_hooks创建文件时D05local(在典型的 unix/linux 方式中,前缀D告诉脚本何时被挂钩05是自我强加的名称排序并且local只是名称,如果您只有一个挂钩,则它的名称并不重要,只要D前缀是

脚本是单行的

(cd /home/user/pbuilder/precise_local ; apt-ftparchive packages . > Packages)

现在放置的任何包都precise_local将满足构建依赖。当向后移植具有也需要向后移植的依赖项的包时,这对于在本地构建依赖关系树非常有用

虚拟机解决方案

要以更简洁的方式做到这一点,请使用 VM 映像或 LXC 容器来解决这个问题。

应用自定义补丁

您可以使用在大多数 debian 包中应用自定义补丁quilt,quilt 补丁可以使用来自大多数 VCS 的差异(请参阅:使用 quilt

还有一个额外的步骤,您必须重建.dsc.debian.tar.gz。我知道最干净的方式是bzr-builddeb它具有最高的成功率恕我直言(与 git-build-package 和其他帮助脚本相比)并且比debuild直接调用要干净得多(bzr= bazaar canonical's VCS)

  1. sudo apt-get install bzr-builddeb
  2. (假设.orig.tar.gz被提取并被.debian.tar.gz提取并放入其中
    • bzr init
    • bzr add
    • bzr commit
  3. (可选的)
    • 调整 debian/changelog
    • 添加补丁debian/patches/和修改debian/patches/series(被子还有用于添加补丁或让您即时修改的实用程序,请参阅文档)
    • bzr add debian/
    • bzr commit
  4. bzr builddeb -- -S -us -uc 这会重建源文件并使其未签名(PPA/发行版上传需要 gpg 签名,但私有本地存储库不需要)
  5. cd ../build-area/ 从上面的第 3 步继续。

这里的步骤 1-4 几乎是您需要上传到 PPA 的内容(它们不采用二进制文件),但是您需要一些步骤来满足启动板的官僚主义(这个答案提供了解释,这个有一些链接)


hwe*_*wez 27

安装

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
Run Code Online (Sandbox Code Playgroud)

之后,如果您检查 gcc 的版本,您会发现旧版本

gcc --version
Run Code Online (Sandbox Code Playgroud)

所以我们可以用简单的符号来修复它

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
Run Code Online (Sandbox Code Playgroud)

或者

您可以使用更新 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++
Run Code Online (Sandbox Code Playgroud)

或者

你可以编译

/usr/bin/gcc4.9 filename.c
Run Code Online (Sandbox Code Playgroud)

gcc-4.9 就像 gcc-4.8 "ubuntu 14.04 gcc" 没什么大的区别

证明

  • gcc 4.9 与 4.8 有很大的不同,它对 opennmp 4.0 的支持。 (3认同)

A T*_*A T 8

Debian 提供了一个软件包:https : //packages.debian.org/jessie/gcc-4.9 - 防止导致 Ubuntu/Debian 兼容性问题;不要将它添加到您的 sources.list。

相反,只需下载所有这些:

binutils_2.25-5_amd64.deb
cpp_4.9.2-2_amd64.deb
g++_4.9.2-2_amd64.deb
gcc_4.9.2-2_amd64.deb
gcc-4.9-base_4.9.2-10_amd64.deb
libasan1_4.9.2-10_amd64.deb
libatomic1_4.9.2-10_amd64.deb
libcilkrts5_4.9.2-10_amd64.deb
libgcc1_4.9.2-10_amd64.deb
libgcc-4.9-dev_4.9.2-10_amd64.deb
libgomp1_4.9.2-10_amd64.deb
libitm1_4.9.2-10_amd64.deb
liblsan0_4.9.2-10_amd64.deb 
libmpfr4_3.1.2-2_amd64.deb
libquadmath0_4.9.2-10_amd64.deb
libstdc++-4.9-dev_4.9.2-10_amd64.deb
libstdc++6
libtsan0_4.9.2-10_amd64.deb
libubsan0_4.9.2-10_amd64.deb
Run Code Online (Sandbox Code Playgroud)

从 Debian 的服务器,例如:

http://ftp.us.debian.org/debian/pool/main/b/binutils/binutils_2.25-5_amd64.deb

然后安装它们,例如: $ for package in *.deb; do sudo dpkg --install "$package"; done

[比记住下载它们的顺序更容易运行几次 bash 循环直到覆盖所有依赖项!]