Ketika saya ingin membuat gcc 4.1.2 ( ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.1.2/gcc-4.1.2/gcc-4.1.2.tar.bz2 ) pada saya ubuntu 12.04 (x86_64). Gcc aktif saat ini adalah 4.6.2. Aku melakukannya:
./configure
kemudian
make
Namun saya mendapatkan kesalahan ini
/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status
Mencari di web sepertinya ada masalah dengan lokasi crti
. File-file ini tersedia di sistem
# 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
Juga paket pengembangan libc6 diinstal
# 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
Bagaimana saya bisa memperbaikinya?
MEMPERBARUI:
Setelah menambahkan ini
LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH
export LIBRARY_PATH
Masalah itu terpecahkan. Namun sekarang saya mengerti
/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
makeinfo
tidak hadir, yang ada di sistem saya. Tidak dapat menemukan kesalahan Anda dengan langkah-langkah ini.Jawaban:
Ini adalah BUG yang dilaporkan di launchpad, tetapi ada solusinya:
mengkompilasi program 64 bit dalam platform 32 bit:
untuk 32 bit asli:
Itu dalam file .bashrc Anda (atau berlari dari konsol) sudah cukup bagi GCC untuk menemukan lokasi baru perpustakaan.
Terima kasih. ke Iain Buclaw (ibuclaw) untuk menunjukkan arah yang benar.
12.10 32 bit
12.10 64 bit
sumber
./configure --disable-multilib
dan membangun kembali dari awal sesuai dengan gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html Terima kasih atas bantuan Andamake install
sebagai langkah terakhir. Saya memang mengatur LIBRARY_PATH tetapi tidak berhasil !! Bantuan apa pun dihargaiexport LIBRARY_PATH="/usr/lib/x86_64-linux-gnu${LIBRARY_PATH+:$LIBRARY_PATH}"
atau (jika Anda tahu itu kosong)export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
Dalam kasus saya
Ubuntu 16.04
, saya tidak punyacrti.o
sama sekali:Jadi saya menginstal paket pengembang:
sumber
Membangun GCC 4.8 pada x86-64 dari sumber hulu Anda mengalami masalah karena perlu membangun perpustakaan 32-dan 64-bit (kecuali multi-lib dinonaktifkan). Dalam hal ini Anda perlu menambahkan kedua jalur
/usr/lib/x86_64-linux-gnu
dan/usr/lib32
.sumber
Saya juga membangun versi gcc yang lebih lama pada mesin Ubuntu saya (3.4.6 pada mesin 4.6.3)
Saya mencoba solusi mahdood @disable-multilib, tetapi kemudian paket yang saya butuhkan untuk menggunakan gcc 3.4.6 juga tampak membutuhkan perpustakaan 32 bit juga.
Jadi saya menambahkan perpustakaan 64 bit dan 32 bit ke LIBRARY_PATH
Oh dan saya di Ubuntu 12,04 64bits
sumber