我正在尝试安装多个版本的 g++ 编译器以进行测试。
我希望能够安装g++ 4.9.3
、5.1.0
、5.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
但是在我的测试中,它们最终都使用了系统安装的标准库,也就是g++-4
-series 标准库。我可以说是因为当我编译代码时,标准库并没有做一些 C++11 标准说它应该做的事情,例如,std::string
移动构造函数没有被标记noexcept
。但是在有gcc-6标准库的ubuntu-xenial上是可以的,其他相关问题都解决了。
我可以看到在 ubuntu 存储库中有一些名为 example 的包libstdc++-4.8-dev
,但是当我安装较新的编译器时,它们似乎并没有使用它们。
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
我这样做主要是根据这个人的指示。
还有一个旧的错误报告提到了它。
该--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
配置 gcc-5.x :
cd build-gcc-5.x/
(需要
sudo apt install zlib1g-dev
,如果--with-system-zlib
)关于“60 分钟限制”:您可以在 55 分钟后退出终端,稍后再继续
make
。