テスト目的で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リポジトリにはlibstdc++-4.8-dev
という名前のパッケージがあることがわかりますが、新しいコンパイラをインストールすると、それらを使用していないようです。
また、ホームディレクトリのソースからコンパイラをインストールできることも知っていますが、ビルドに時間がかかるため、残念ながらtravis-ci
内で実行できません。 travis-ciでは、すべてのビルドは1時間後にタイムアウトします。
Ppaからインストールするコンパイラを設定して、正しいバージョンのC++標準ライブラリ、つまりシステムのデフォルトではなくリリースされたものを使用する簡単な方法はありますか?
ソースからのビルドを伴わないapt-getを使用して、コンパイラバイナリとそれに関連するすべてのライブラリをホームディレクトリのフォルダーにインストールする簡単な方法はありますか?
私は これらの指示 を見つけました。これは、-rpath
フラグまたはspecsファイルを使用できる、またはLD_LIBRARY_PATH
を調整できると言っています、しかし、私が確信していないのは、どのパスを設定すべきかということです。別の問題は、それが単なる動的リンカーではなく、ubuntu-toolchain-r/test
コンパイラーがシステムlibstdc++
ヘッダーも使用しているように見えるため、何らかの方法で修正する必要があるということです。
私の現在の戦略は、ソースコードリリースのtarballをダウンロードし、60分以内にビルドする方法が見つかるまでconfigureフラグをいじるだけです。一度ビルドすると、「キャッシュ」ディレクトリにあるので、プロジェクトの今後のビルドで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
オプションは文書化されていますが、ここで説明されているように 、実際にコンパイラを3回ビルドできないように願っています ...これは動作します。
その後、実際にビルドするために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/
../gcc-5.3.0/configure --prefix=/usr/local/gcc53 --program-suffix=53 --enable-languages=c,c++ --with-system-zlib --disable-multilib --disable-libstdcxx-pch
(Sudo apt install zlib1g-dev
の場合、--with-system-zlib
が必要)
「60分間の制限」について:たとえば55分後にターミナルを終了し、後でmake
で続行できます。