3

GCC と Ubuntu のいくつかのバージョン以来、GCC のインストールに必要ないくつかのヘッダーとオブジェクト ファイルのパスと名前付けで厄介な問題が発生しています。

説明: ubuntu (私の場合は 12.04) をインストールし、gcc のすべての前提条件をインストールした後、次のコマンドを実行します。

sudo mkdir /usr/local/stow/gcc-4.8.0
./configure --prefix /usr/local/stow/gcc-4.8.0
make
sudo make install

完全を期すために、残りのインストール手順は次のとおりです。

cd /usr/local/stow
sudo stow -t /usr/local/ gcc-4.8.0
gcc -v

ただし、gcc をインストールするこの単純で適切な方法には、「make」ステップで次のエラー メッセージが表示されるという問題があります。

1.) 「stubs.h」の問題

/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory

これは ~/.bashrc に次のコマンドを追加することで修正できます:

if [ -z "$CPATH"]; then
        export CPATH="/usr/include/i386-linux-gnu"
else
        export CPATH=$CPATH:"/usr/include/i386-linux-gnu"
fi

2.) 「crti.o」、「crtn.o」、「crt1.o」の問題

/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: cannot find crtn.o: No such file or directory
/usr/bin/ld: cannot find crt1.o: No such file or directory

これは非常に醜い解決策で修正できます:

sudo ln -s /usr/lib/i386-linux-gnu/crti.o /usr/lib/i386-linux-gnu/crtn.o /usr/lib/i386-linux-gnu/crt1.o /usr/lib

理由はわかりませんが、次のコマンドは「sudo make install」のリンク手順中に問題を解決しません。

if [ -z "$LIBRARY_PATH"]; then
    export LIBRARY_PATH="/usr/lib/${multiarch}"
else
    export LIBRARY_PATH=$LIBRARY_PATH:"/usr/lib/${multiarch}"
fi

if [ -z "$LD_LIBRARY_PATH"]; then
    export LD_LIBRARY_PATH="/usr/lib/${multiarch}"
else
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"/usr/lib/${multiarch}"
fi

(これらのソリューションを使用すると、Ubuntu 12.04 で GCC-4.7.2 をコンパイルできます。- Ubuntu 12.04 で GCC-4.8.0 をコンパイルする際にまだ問題がありますが、それは別のトピックです。)

私の質問は次のとおりです。これらの問題が発生した理由/背景を知っている人はいますか? 誰か適切な解決策を知っていますか?(「適切な解決策」とは、環境変数やシンボリック リンク ライブラリを別のディレクトリに設定する必要がない解決策を意味します。私にとって、この種の変更は見苦しいものです。またはやり直し)

4

2 に答える 2

3

GCC ソースのルート フォルダーで、./contrib/download_prerequisitesスクリプトを実行します。

于 2014-06-17T02:57:14.550 に答える
2

これらは、ソリューションを使用して Ubuntu 12.04 で GCC 4.8.0 をコンパイルしているときに発生した問題です。

これはあなたを助けるかもしれません。

ubuntu 12.04 で GCC 4.8 をコンパイルするためのコンパイル ガイド

エラー 1

configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
their locations.  Source code for these libraries can be found at
their respective hosting sites as well as at
ftp://gcc.gnu.org/pub/gcc/infrastructure/.  See also
http://gcc.gnu.org/install/prerequisites.html for additional info.  If
you obtained GMP, MPFR and/or MPC from a vendor distribution package,
make sure that you have installed both the libraries and the header
files.  They may be located in separate packages.

解決

  1. mpc にはより高いバージョンが必要なため、gmp バージョン >=4.3.2 パッケージをダウンロードしてインストールします。
    • gmplib.org からソース コードをダウンロードします。
    • ソースコードをコンパイルしてインストールする
    • gmp のコンパイル中にエラー 2 がヘルプとして表示されます
    • gmp バージョン 5.1.1 をインストール
  2. mpfr パッケージをダウンロードしてインストールする
    • mpfr バージョン 3.1.2 をインストール
  3. mpc パッケージをダウンロードしてインストールする
    • インストールされた mpc バージョン 1.0

http://ftp.gnu.orgからパッケージをダウンロードします。


エラー 2

Error while compiling gmp library

checking for suitable m4... configure: error: No usable m4 in $PATH or /usr/5bin

解決

sudo apt-get install m4 

http://ubuntuforums.org/showthread.php?t=850491


エラー 3

Cannot find g++ compiler

最近 OS をインストールし、コンパイラをインストールしていなかったため、このエラーが発生しました。

解決

sudo apt-get install build-essential

これにより、すべての標準ビルドに不可欠なソフトウェアがインストールされます


エラー 4

checking for i686-pc-linux-gnu-gcc... /home/suhastheju/projects/gcc/gcc-4.8.0/host-i686-pc-linux-gnu/gcc/xgcc -B/home/suhastheju/projects/gcc/gcc-4.8.0/host-i686-pc-linux-gnu/gcc/ -B/usr/local/i686-pc-linux-gnu/bin/ -B/usr/local/i686-pc-linux-gnu/lib/ -isystem /usr/local/i686-pc-linux-gnu/include -isystem /usr/local/i686-pc-linux-gnu/sys-include   
checking for suffix of object files... configure: error: in `/home/suhastheju/projects/gcc/gcc-4.8.0/i686-pc-linux-gnu/libgcc':
configure: error: cannot compute suffix of object files: cannot compile
See `config.log' for more details.
make[2]: *** [configure-stage1-target-libgcc] Error 1
make[2]: Leaving directory `/home/suhastheju/projects/gcc/gcc-4.8.0'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/home/suhastheju/projects/gcc/gcc-4.8.0'
make: *** [all] Error 2

解決

gcc のドキュメントでは が指定されていますが、–with-gmp および –with-mpfr フラグを使用して gmp および mpfr インストールのパスを提供できますが、残念ながら、パスを提供しようとしましたが、機能しませんでした。

これがビルド スクリプトのバグなのか他の何かなのかについて、私は最終的な言葉を言う立場にはありませんが、問題の解決策は次のとおりです。

ビルド中に、gmp および mpfr インストール パスを LD_LIBRARY_PATH 環境変数に追加します。次のように実行します export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

ライブラリが別のパスにある場合は、ライブラリが存在するパスを追加します


エラー 5

libbackend.a(tree-vect-data-refs.o):tree-vect-data-refs.c:(.text+0x87da): more undefined references to `vector_type_mode(tree_node const*)' follow
collect2: error: ld returned 1 exit status
make[3]: *** [cc1] Error 1
make[3]: Leaving directory `/home/suhastheju/projects/gcc/gcc-4.8.0/host-i686-pc-linux-gnu/gcc'
make[2]: *** [all-stage2-gcc] Error 2
make[2]: Leaving directory `/home/suhastheju/projects/gcc/gcc-4.8.0'
make[1]: *** [stage2-bubble] Error 2
make[1]: Leaving directory `/home/suhastheju/projects/gcc/gcc-4.8.0'
make: *** [all] Error 2

解決

ソースコードを最初から再コンパイルしたところ、魔法のように機能しました

make clean all

エラー 6

/home/suhastheju/projects/gcc/gcc-4.8.0/host-i686-pc-linux-gnu/gcc/../.././gcc/gcov.c:416: undefined reference to `gcc_init_libintl()'
collect2: ld returned 1 exit status
make[3]: *** [gcov] Error 1
make[3]: Leaving directory `/home/suhastheju/projects/gcc/gcc-4.8.0/host-i686-pc-linux-gnu/gcc'

解決

-I/usr/include を追加

于 2013-04-09T16:28:43.167 に答える