crti.o bulunamadı: Böyle bir dosya veya dizin yok


19

Gcc 4.1.2 ( ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-4.1.2/gcc-4.1.2.tar.bz2 ) Ubuntu 12.04 (x86_64). Mevcut aktif gcc 4.6.2'dir. Yaptım:

./configure

sonra

make

Ancak bu hatayı alıyorum

/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status

Web'de arama ile ilgili bir sorun var gibi görünüyor crti. Bu dosyalar sistemde mevcuttur

# 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

Ayrıca libc6 devel paketi de kuruldu

# 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

Bunu nasıl düzeltebilirim?

GÜNCELLEME:

Bunları ekledikten sonra

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

Bu problem çözüldü. Ancak şimdi

/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

Ben yaklaşık, diğer hataları alıyorum makeinfoolmama mevcut, olduğu sistemimde. Bu adımlarla hatanıza ulaşılamıyor.
— gertvdijk

Yanıtlar:


13

Bu bir BUG fırlatma rampasında bildirilen, byt bir çözüm vardır:

32 bit platformda 64 bit programı derleme:

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

32 bit yerel için:

LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH

Bu, .bashrc dosyanızda (veya bir konsoldan çalıştırıldığında) GCC'nin kitaplığın yeni konumunu bulması için yeterlidir.

Teşekkür. Iain Buclaw'a (ibuclaw) doğru yöne işaret etmek için.

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

Bu problem çözüldü. Ancak yeni bir hata alıyorum. Lütfen orijinal mesaja bakın
— mahmood

2
Teşekkürler ama ikinci sorunun çözümü bu değildi. Ben yapmak zorunda olduğu tespit ./configure --disable-multilibve uygun sıfırdan yeniden gcc.gnu.org/ml/gcc-help/2009-05/msg00238.html Yardımlarınız için teşekkür
— Mahmood

Ubuntu 16.04 ve yapımımla çalışmıyor.
— Niklas

Aynı sorunla karşı karşıyayım ama make installson adım olarak koşarken . LIBRARY_PATH ayarladım ama boşuna! Herhangi bir yardım takdir
— faizan

1
Bunu kullandıktan sonra "Geçerli dizin daha önce boş bir LIBRARY_PATH neden LIBRARY_PATH` olmamalıdır. Bu nedenle kullanın export LIBRARY_PATH="/usr/lib/x86_64-linux-gnu${LIBRARY_PATH+:$LIBRARY_PATH}"veya (boş olduğunu biliyorsanız)export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
— Flamefire

1

Benim durumumda Ubuntu 16.04hiç yok crti.o:

$ find /usr/ -name crti*

Bu yüzden geliştirici paketini yükledim:

sudo apt-get install libc6-dev

0

Yukarı akış kaynaklarından x86-64 üzerinde GCC 4.8 oluşturmak, hem 32 hem de 64 bit kitaplıkları oluşturmaya ihtiyaç duyduğunuz sorunla karşılaşırsınız (çoklu lib devre dışı bırakılmadığı sürece). Bu durumda her iki yollar eklemeniz gerekir /usr/lib/x86_64-linux-gnuve /usr/lib32.


Varsayılan olarak evet. Ancak ./configure için --with-multilib-list = m64 seçeneğiyle derlemeyi yalnızca 64 bit ile sınırlandırabilirsiniz. GCC 4.8.5'i inşa ettiğimde benim için çalıştı. Ayrıca stackoverflow.com/a/55703805/4807875 adresindeki cevabımda (bölüm 3) de bahsettim .
— Alexander Samoylov

0

Ayrıca Ubuntu makinemde (4.6.3 makinede 3.4.6)
gcc'nin daha eski bir sürümünü oluşturuyorum. 32 bit kütüphaneye de ihtiyaç var.

Böylece hem 64 bit hem de 32 bit kütüphaneleri LIBRARY_PATH'e ekledim

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

Oh ve ben Ubuntu'dayım 12.04 64bits


1
Eski gcc / g ++ ile çalışmak için Ubuntu'yu unutmanız gerekir, çünkü Ubuntu'nun yeni sürümünde sorunu tam olarak çözemezsiniz ve diğer yandan eski bir Ubuntu artık desteklenmemektedir. Rehdat tabanlı sistemleri kullanmalısınız. Centos 6.3 is ok
— mahmood
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.