tidak dapat menemukan crti.o: Tidak ada file atau direktori tersebut

19

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
mahmood
sumber
Saya mendapatkan kesalahan lain, tentang makeinfotidak hadir, yang ada di sistem saya. Tidak dapat menemukan kesalahan Anda dengan langkah-langkah ini.
gertvdijk

Jawaban:

13

Ini adalah BUG yang dilaporkan di launchpad, tetapi ada solusinya:

mengkompilasi program 64 bit dalam platform 32 bit:

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH 
export LIBRARY_PATH

untuk 32 bit asli:

LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH

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

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

12.10 64 bit

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
hhlp
sumber
Masalah itu terpecahkan. Namun kesalahan baru saya dapatkan. Silakan lihat posting asli
mahmood
2
Terima kasih tapi itu bukan solusi untuk masalah kedua. Saya menemukan bahwa saya harus melakukan ./configure --disable-multilibdan membangun kembali dari awal sesuai dengan gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html Terima kasih atas bantuan Anda
mahmood
Tidak bekerja dengan Ubuntu 16.04 dan build saya.
Niklas
Saya menghadapi masalah yang sama, tetapi saat berjalan make installsebagai langkah terakhir. Saya memang mengatur LIBRARY_PATH tetapi tidak berhasil !! Bantuan apa pun dihargai
faizan
1
Setelah menggunakan itu saya punya masalah "Direktori saat ini tidak boleh di LIBRARY_PATH` yang disebabkan oleh LIBRARY_PATH yang sebelumnya kosong. Karenanya gunakan export 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
Flamefire
1

Dalam kasus saya Ubuntu 16.04, saya tidak punya crti.osama sekali:

$ find /usr/ -name crti*

Jadi saya menginstal paket pengembang:

sudo apt-get install libc6-dev
Eugen Konkov
sumber
0

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-gnudan /usr/lib32.

John Vreeland
sumber
Secara default ya. Tetapi Anda dapat membatasi build hanya 64bit dengan opsi --with-multilib-list = m64 for ./configure. Itu bekerja untuk saya ketika saya membangun GCC 4.8.5. Saya menyebutkannya juga di jawaban saya (bagian 3) di stackoverflow.com/a/55703805/4807875 .
Alexander Samoylov
0

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

LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:/usr/lib32:$LIBRARY_PATH 
export LIBRARY_PATH 

Oh dan saya di Ubuntu 12,04 64bits

Heartinpiece
sumber
1
Untuk bekerja dengan gcc / g ++ yang lebih lama, Anda harus melupakan Ubuntu karena pada versi Ubuntu yang lebih baru, Anda tidak dapat sepenuhnya memperbaiki masalah dan Ubuntu yang lebih tua di sisi lain tidak lagi didukung. Anda harus menggunakan sistem berbasis rehdat. Centos 6.3 ok
mahmood