Gcc 4.1.2を作成したい場合( ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.1.2/gcc-4.1.2.tar。私のubuntu 12.04(x86_64)ではbz2 )。現在アクティブなgccは4.6.2です。やった:
./configure
それから
make
しかし、私はこのエラーを受け取ります
/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status
Webを検索すると、crti
の場所に問題があるようです。これらのファイルはシステムで利用可能です
# find /usr/ -name crti*
/usr/lib32/crti.o
/usr/lib/x86_64-linux-gnu/crti.o
/usr/lib/debug/usr/lib/x86_64-linux-gnu/crti.o
Libc6 develパッケージもインストールされます
# dpkg -l | grep libc6
ii libc6 2.15-0ubuntu10.3 Embedded GNU C Library: Shared libraries
ii libc6-dbg 2.15-0ubuntu10.3 Embedded GNU C Library: detached debugging symbols
ii libc6-dev 2.15-0ubuntu10.3 Embedded GNU C Library: Development Libraries and Header Files
ii libc6-dev-i386 2.15-0ubuntu10.3 Embedded GNU C Library: 32-bit development libraries for AMD64
ii libc6-i386 2.15-0ubuntu10.3 Embedded GNU C Library: 32-bit shared libraries for AMD64
ii libc6-pic 2.15-0ubuntu10.3 Embedded GNU C Library: PIC archive library
どうすれば修正できますか?
UPDATE:
これらを追加した後
LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH
export LIBRARY_PATH
その問題は解決されました。しかし、今私は得る
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.so when searching for -lc
/usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/libc.a when searching for -lc
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux-gnu/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/x86_64-linux- gnu/crtn.o' is incompatible with i386 output
collect2: ld returned 1 exit status
これは BUG であり、ランチパッドで報告されていますが、回避策があります:
32ビットプラットフォームで64ビットプログラムをコンパイルする:
LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH
export LIBRARY_PATH
ネイティブ32ビットの場合:
LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH
GCCがライブラリの新しい場所を見つけるには、.bashrcファイル(またはコンソールから実行)で十分です。
どうも。 Iain Buclaw(ibuclaw)に正しい方向を指し示します。
hhlp@hhlp:~$ Sudo find /usr/ -name crti*
/usr/lib/i386-linux-gnu/crti.o
hhlp@hhlp:~$
LIBRARY_PATH=/usr/lib/i386-linux-gnu:$LIBRARY_PATH
export LIBRARY_PATH
hhlp@hhlp:~$ Sudo find /usr/ -name crti*
/usr/lib/x86_64-linux-gnu/crti.o
hhlp@hhlp:~$
LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH
export LIBRARY_PATH
私の場合はUbuntu 16.04
はありませんcrti.o
はまったくありません:
$ find /usr/ -name crti*
そこで、開発者パッケージをインストールします。
Sudo apt-get install libc6-dev
アップストリームソースからx86-64でGCC 4.8をビルドすると、32ビットと64ビットの両方のライブラリをビルドする必要があるという問題が発生します(multi-libが無効になっていない限り)。その場合、/usr/lib/x86_64-linux-gnu
と/usr/lib32
の両方のパスを追加する必要があります。
また、Ubuntuマシン(4.6.3マシンでは3.4.6)でgccの古いバージョンを構築しています
@ mahmoodの--disable-multilibソリューションを試しましたが、gcc 3.4.6を使用するために必要なパッケージには32ビットライブラリも必要であるように思われました。
したがって、64ビットライブラリと32ビットライブラリの両方をLIBRARY_PATHに追加しました
LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH
ああ、Ubuntu 12.04 64ビットを使用しています