gcc/g++ダウンバージョン

6992 ワード

一、概説
  • gcc:gnuのCコンパイラ
  • g+:gnuのC++コンパイラ.

  • linuxシステムgcc/g++バージョンを表示するコマンド
    gcc --version //  for example: gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609
    g++ --version //  for example: g++ (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609

    実際に開発で使用したソフトウェアは安定性を保証するために、より低いバージョンのgcc/g++コンパイラを使用して生成された可能性があり、ユーザーが高バージョンのgcc/g++コンパイルを使用するとソフトウェアエラーが発生し、使用できない可能性があります.例えば、私のシステムのデフォルトのインストールはgcc/g++5.4.0バージョンで、プログラムの中でprotobufのライブラリを呼び出して、protobuf-3.3.0バージョンをコンパイルした後、呼び出しプログラムは「symbol lookup error:undefined symbol:_ZN6 google 8 protobuf 8 iternal 26 fixed_address_empty_stringE」を間違えました.ソリューション:gcc/g++を4.8バージョンに降格し、protobuf-3.3.0ライブラリをコンパイルすると、プログラムは正常に実行されます.
    これは、システムgcc/g++をダウングレードすることに関する.もちろん、gcc/g++バージョンのアップグレードに関連する場合がありますが、方法は似ています.本稿では、gcc/g++のダウングレードを例に説明します.
    二、原理
    gcc/g++のインストール場所を表示し、コマンド:
    which gcc

    その結果、/usr/bin/gccが表示され、/usr/binフォルダを表示するとgccとg++が実際にソフトリンクであることがわかります(ls-lを使用してファイルを表示するとgcc->gcc-5、g+->gcc-5、g+->gcc-5)、実際のインストーラはgcc-5/g+-5であり、ソフト接続はgcc/g++をgcc-5/g++-5にそれぞれリンクするので、実際にgcc/g++を使用してコンパイルするとgcc-5/g+-5にリンクします.
    (ls-lを使用してファイルを表示すると、gcc->gcc-5、g+->gcc-5が表示されます)gcc/g++バージョンを変更するには、新しいバージョンをインストールし、gcc/g++をそれぞれ新しいバージョンのプログラムにリンクするだけです(linuxシステムでは、設計プログラムがアップグレード/ダウングレードしやすく、複数のバージョンプログラムが同時に存在し、ソフトリンクを呼び出すインタフェースがどのバージョンを使用するかを選択するだけです).
    三、具体的な操作手順
    1.指定バージョンgcc/g++のインストール
    4.8を例にとります.
    sudo apt-get  install -y gcc-4.8

    Reading package lists... Done Building dependency tree        Reading state information... Done The following additional packages will be installed:   cpp-4.8 gcc-4.8-base libasan0 libcloog-isl4 libgcc-4.8-dev Suggested packages:   gcc-4.8-locales gcc-4.8-multilib gcc-4.8-doc libgcc1-dbg libgomp1-dbg   libitm1-dbg libatomic1-dbg libasan0-dbg libtsan0-dbg libquadmath0-dbg The following NEW packages will be installed:   cpp-4.8 gcc-4.8 gcc-4.8-base libasan0 libcloog-isl4 libgcc-4.8-dev 0 upgraded, 6 newly installed, 0 to remove and 569 not upgraded. Need to get 11.5 MB of archives. After this operation, 36.5 MB of additional disk space will be used. Do you want to continue? [Y/n]
    Yを選択し、
    Get:1 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 gcc-4.8-base amd64 4.8.5-4ubuntu2 [15.1 kB] Get:2 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 libcloog-isl4 amd64 0.18.4-1 [60.5 kB] Get:3 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 cpp-4.8 amd64 4.8.5-4ubuntu2 [4,599 kB] Get:4 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 libasan0 amd64 4.8.5-4ubuntu2 [63.2 kB] Get:5 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 libgcc-4.8-dev amd64 4.8.5-4ubuntu2 [1,687 kB] Get:6 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 gcc-4.8 amd64 4.8.5-4ubuntu2 [5,064 kB] Get:6 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 gcc-4.8 amd64 4.8.5-4ubuntu2 [5,064 kB] Fetched 9,719 kB in 4min 36s (35.2 kB/s)                                        Selecting previously unselected package gcc-4.8-base:amd64. (Reading database ... 251339 files and directories currently installed.) Preparing to unpack .../gcc-4.8-base_4.8.5-4ubuntu2_amd64.deb ... Unpacking gcc-4.8-base:amd64 (4.8.5-4ubuntu2) ... Selecting previously unselected package libcloog-isl4:amd64. Preparing to unpack .../libcloog-isl4_0.18.4-1_amd64.deb ... Unpacking libcloog-isl4:amd64 (0.18.4-1) ... Selecting previously unselected package cpp-4.8. Preparing to unpack .../cpp-4.8_4.8.5-4ubuntu2_amd64.deb ... Unpacking cpp-4.8 (4.8.5-4ubuntu2) ... Selecting previously unselected package libasan0:amd64. Preparing to unpack .../libasan0_4.8.5-4ubuntu2_amd64.deb ... Unpacking libasan0:amd64 (4.8.5-4ubuntu2) ... Selecting previously unselected package libgcc-4.8-dev:amd64. Preparing to unpack .../libgcc-4.8-dev_4.8.5-4ubuntu2_amd64.deb ... Unpacking libgcc-4.8-dev:amd64 (4.8.5-4ubuntu2) ... Selecting previously unselected package gcc-4.8. Preparing to unpack .../gcc-4.8_4.8.5-4ubuntu2_amd64.deb ... Unpacking gcc-4.8 (4.8.5-4ubuntu2) ... Processing triggers for libc-bin (2.23-0ubuntu11) ... Processing triggers for man-db (2.7.5-1) ... Setting up gcc-4.8-base:amd64 (4.8.5-4ubuntu2) ... Setting up libcloog-isl4:amd64 (0.18.4-1) ... Setting up cpp-4.8 (4.8.5-4ubuntu2) ... Setting up libasan0:amd64 (4.8.5-4ubuntu2) ... Setting up libgcc-4.8-dev:amd64 (4.8.5-4ubuntu2) ... Setting up gcc-4.8 (4.8.5-4ubuntu2) ... Processing triggers for libc-bin (2.23-0ubuntu11) ...
    sudo apt-get install -y g++-4.8

    Reading package lists... Done Building dependency tree        Reading state information... Done The following additional packages will be installed:   libstdc++-4.8-dev Suggested packages:   g++-4.8-multilib gcc-4.8-doc libstdc++6-4.8-dbg libstdc++-4.8-doc The following NEW packages will be installed:   g++-4.8 libstdc++-4.8-dev 0 upgraded, 2 newly installed, 0 to remove and 569 not upgraded. Need to get 19.2 MB of archives. After this operation, 40.2 MB of additional disk space will be used. Do you want to continue?
    Yを選択し、
    Get:1 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 libstdc++-4.8-dev amd64 4.8.5-4ubuntu2 [1,049 kB] Get:2 http://cn.archive.ubuntu.com/ubuntu xenial/universe amd64 g++-4.8 amd64 4.8.5-4ubuntu2 [18.2 MB] Fetched 19.2 MB in 1min 35s (202 kB/s)                                          Selecting previously unselected package libstdc++-4.8-dev:amd64. (Reading database ... 251491 files and directories currently installed.) Preparing to unpack .../libstdc++-4.8-dev_4.8.5-4ubuntu2_amd64.deb ... Unpacking libstdc++-4.8-dev:amd64 (4.8.5-4ubuntu2) ... Selecting previously unselected package g++-4.8. Preparing to unpack .../g++-4.8_4.8.5-4ubuntu2_amd64.deb ... Unpacking g++-4.8 (4.8.5-4ubuntu2) ... Processing triggers for man-db (2.7.5-1) ... Setting up libstdc++-4.8-dev:amd64 (4.8.5-4ubuntu2) ... Setting up g++-4.8 (4.8.5-4ubuntu2) ...
    2.元のソフトリンクをバックアップします(オプションで、必要に応じてソフトリンクを作成することもできます).
    cd /usr/bin
    sudo mv gcc gcc_link5_bak
    sudo mv g++ g++_link5_bak

    3.インストール後、ソフト接続を変更すればよい:
    sudo ln -s gcc-4.8 gcc
    sudo ln -s g++-4.8 g++

    4.再度gcc/g++バージョン確認
    gcc--versionコマンドの後に表示されます:gcc(Ubuntu 4.8.5-4 ubuntu 2)4.8.5バージョンの交換に成功したことを示します
    注意:g++バージョンにはいくつかのバグがあります.たとえば、sortの入力パラメータがconstであることを強制し、GCC 4.9.0+バージョン以降に修復します.https://stackoverflow.com/questions/52673134/why-do-i-get-a-compilation-error-for-this-program-in-g-4-8-5
    より包括的なgcc/g++関連プログラムのフォローアップ調整については、以下を参照してください.https://www.jianshu.com/p/7c73e386f0e4
    参照先:https://www.jianshu.com/p/8d73cb869957
     
    四、Cmakelistでg++/gccバージョンを指定する
    cmakelistでは、デフォルトのg++/gcc、すなわち上のソフト接続が呼び出されます.
    ソフト接続を毎回変更したくない場合は、cmakelistでコンパイラバージョンを手動で指定します.
    SET(CMAKE_C_COMPILER "/usr/bin/gcc-4.8") SET(CMAKE_CXX_COMPILER "/usr/bin/g++-4.8")
    詳細cmakeおよびコンパイルについては、次を参照してください.https://blog.csdn.net/Cxiazaiyu/article/details/90769079