如何安装使用相应 C++ 标准库的新版本 G++?

Chr*_*eck 5 apt compiling c++ g++ 12.04

我正在尝试安装多个版本的 g++ 编译器以进行测试。

我想能够安装g++ 4.9.35.1.05.2.0,和6.1.0

我知道我能做到

sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y;
sudo apt-get update -qq
sudo apt-get install g++-4.9, g++5.1, g++5.2, g++6
Run Code Online (Sandbox Code Playgroud)

但是在我的测试中,它们最终都使用了系统安装的标准库,即g++-4-series 标准库。我可以说是因为当我编译代码时,标准库并没有做一些 C++11 标准说它应该做的事情,例如,std::string移动构造函数没有被标记为noexcept。但是在具有 gcc-6 标准库的 ubuntu-xenial 上,它是,并且其他相关问题已解决。

我可以看到libstdc++-4.8-dev在 ubuntu 存储库中有例如命名的包,但是当我安装较新的编译器时,它们似乎没有使用它们。

我也知道我可以在我的主目录中从源代码安装编译器,但是构建它们需要很长时间,travis-ci不幸的是我无法在其中完成。在 travis-ci 中,所有构建都会在一小时后超时。

有没有一种简单的方法可以配置从 ppa 安装的编译器以使用正确版本的 C++ 标准库,即它们发布的版本而不是系统默认版本?

有没有一种简单的方法可以使用不涉及从源代码构建的 apt-get 将编译器二进制文件及其所有关联的库安装到我的主目录中的文件夹中?

我找到了这些说明,上面说我可以使用-rpath标志或规格文件,或者调整LD_LIBRARY_PATH,但我不确定我应该设置哪些路径。另一个问题是,它不仅仅是动态链接器,ubuntu-toolchain-r/test编译器似乎libstdc++也在使用系统头文件,所以我需要以某种方式纠正它。


我目前的策略是,只下载源代码发布 tarball 并尝试摆弄配置标志,直到我能找到一种在 < 60 分钟内构建它的方法。一旦我让它构建一次,它就在我的“缓存”目录中,所以我项目的未来构建可以在 < 1 分钟内获得图像。

“缓存”功能仅在使用 ubuntu-precise (12.04 LTS) travis 图像时可用,所以我什至不能在这里使用 trusty。

我的配置行目前是:

${GCC_SRC_DIR}/configure --prefix=${GCC_DIR}  --disable-checking --enable-languages=c,c++ --disable-multilib --disable-bootstrap
Run Code Online (Sandbox Code Playgroud)

我这样做主要是根据这个人的指示

还有一个旧的错误报告提到了它。

--disable-checking选项并没有真正记录在案,所以也许它已经不复存在了。该--disable-bootstrap选项已记录在案,希望它会阻止我按照此处的描述实际构建编译器三遍……但不确定这有多大可能起作用。

make -j2 --quiet用来在那之后实际构建。


现在使用更长的线:

        ${GCC_SRC_DIR}/configure --prefix=${GCC_DIR}  --disable-checking --enable-languages=c,c++ --disable-multilib --disable-bootstrap --disable-libsanitizer --disable-libquadmath --disable-libgomp --disable-libssp --disable-libvtv --disable-libada --enable-version-specific-runtime-libs
Run Code Online (Sandbox Code Playgroud)

Knu*_*sen 1

配置 gcc-5.x :cd build-gcc-5.x/

../gcc-5.3.0/configure --prefix=/usr/local/gcc53 --program-suffix=53 --enable-languages=c,c++ --with-system-zlib --disable-multilib --disable-libstdcxx-pch
Run Code Online (Sandbox Code Playgroud)

(需要sudo apt install zlib1g-dev,如果--with-system-zlib

关于“60 分钟限制”:您可以在 55 分钟后退出终端,稍后再按 继续make