ไม่พบ crti.o: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว


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) gcc ที่ใช้งานอยู่ในปัจจุบันคือ 4.6.2 ฉันทำ:

./configure

แล้วก็

make

อย่างไรก็ตามฉันได้รับข้อผิดพลาดนี้

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

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

ฉันพบข้อผิดพลาดอื่น ๆ เกี่ยวกับการmakeinfoไม่ปรากฏตัวซึ่งอยู่ในระบบของฉัน ไม่สามารถรับข้อผิดพลาดของคุณด้วยขั้นตอนเหล่านี้
gertvdijk

คำตอบ:


13

นี่คือBUG ที่รายงานใน launchpad โดยมีวิธีแก้ปัญหา:

รวบรวมโปรแกรม 64 บิตในแพลตฟอร์ม 32 บิต:

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

สำหรับ 32 บิตเนทิฟ:

LIBRARY_PATH=/usr/lib32:$LIBRARY_PATH
export LIBRARY_PATH

ในไฟล์. bashrc ของคุณ (หรือเรียกใช้จากคอนโซล) ก็เพียงพอแล้วที่ GCC จะค้นหาตำแหน่งใหม่ของไลบรารี

ขอบคุณ. เพื่อ Iain Buclaw (ibuclaw) เพื่อชี้ให้เห็นในทิศทางที่ถูกต้อง

12.10 32 บิต

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 บิต

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

ปัญหานั้นได้รับการแก้ไขแล้ว อย่างไรก็ตามฉันได้รับข้อผิดพลาดใหม่ โปรดดูโพสต์ต้นฉบับ
mahmood

2
ขอบคุณ แต่นั่นไม่ใช่ทางออกสำหรับปัญหาที่สอง ฉันพบว่าฉันต้องทำ./configure --disable-multilibและสร้างใหม่ตั้งแต่ต้นตามgcc.gnu.org/ml/gcc-help/2009-05/msg00238.htmlขอบคุณสำหรับความช่วยเหลือของคุณ
mahmood

ไม่ทำงานกับ Ubuntu 16.04 และงานสร้างของฉัน
Niklas

ฉันประสบปัญหาเดียวกัน แต่ในขณะที่ทำงานmake installเป็นขั้นตอนสุดท้าย ฉันตั้ง LIBRARY_PATH แล้ว แต่ไม่มีประโยชน์ !! ความช่วยเหลือใด ๆ ชื่นชม
faizan

1
หลังจากใช้งานฉันพบปัญหา "ไดเรกทอรีปัจจุบันไม่ควรอยู่ใน LIBRARY_PATH` ที่เกิดจาก LIBRARY_PATH ที่ว่างเปล่าก่อนหน้านี้ดังนั้นให้ใช้export LIBRARY_PATH="/usr/lib/x86_64-linux-gnu${LIBRARY_PATH+:$LIBRARY_PATH}"หรือ (ถ้าคุณรู้ว่ามันว่างเปล่า)export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
Flamefire

1

ในกรณีUbuntu 16.04ของฉันฉันไม่มีcrti.oเลย:

$ find /usr/ -name crti*

ดังนั้นฉันจึงติดตั้งแพ็คเกจนักพัฒนาซอฟต์แวร์:

sudo apt-get install libc6-dev

0

การสร้าง GCC 4.8 บน x86-64 จากแหล่งข้อมูลต้นน้ำที่คุณพบปัญหาในการต้องการสร้างทั้งไลบรารี 32- และ 64- บิต (เว้นแต่ว่าจะปิดใช้งาน multi-lib) ในกรณีที่คุณต้องเพิ่มเส้นทางทั้งสองและ/usr/lib/x86_64-linux-gnu/usr/lib32


โดยค่าเริ่มต้นใช่ แต่คุณสามารถ จำกัด การสร้างได้เพียง 64 บิตด้วยตัวเลือก - ด้วย -multilib-list = m64 สำหรับ ./configure มันทำงานสำหรับฉันเมื่อฉันสร้าง GCC 4.8.5 ที่ผมกล่าวถึงมันยังอยู่ในคำตอบของฉัน (ส่วน 3) บนstackoverflow.com/a/55703805/4807875
Alexander Samoylov

0

ฉันกำลังสร้าง gcc รุ่นเก่ากว่าบนเครื่อง Ubuntu ของฉัน (3.4.6 บนเครื่อง 4.6.3)
ฉันลองใช้ @ mahmood's - แก้ปัญหาได้ - 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 บิต


1
ในการทำงานกับ gcc / g ++ ที่เก่ากว่าคุณต้องลืม Ubuntu เพราะ Ubuntu รุ่นใหม่กว่าคุณไม่สามารถแก้ไขปัญหาได้อย่างสมบูรณ์และ Ubuntu รุ่นเก่าในทางกลับกันไม่ได้รับการสนับสนุนอีกต่อไป คุณต้องใช้ระบบที่ใช้ rehdat Centos 6.3 is ok
mahmood
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.