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.