Неможливо знайти 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

Також встановлено пакет debc6 розробки

# 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

Як я можу це виправити?

ОНОВЛЕННЯ:

Після додавання цих

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

Це помилка, про яку повідомляється в стартовій панелі, байтом є рішення:

складання програми 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 і моєю збіркою.
Ніклас

Я стикаюся з тією ж проблемою, але під час виконання 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-бітних бібліотек (якщо не вимкнено багатовідовий ліб). У цьому випадку вам потрібно додати обидва шляхи /usr/lib/x86_64-linux-gnuта /usr/lib32.


За замовчуванням так. Але ви можете обмежити збірку лише 64-бітовою з можливістю --with-multilib-list = m64 для ./configure. Це працювало для мене, коли я будував GCC 4.8.5. Я згадував це також у своїй відповіді (частина 3) на stackoverflow.com/a/55703805/4807875 .
Олександр Самойлов

0

Я також
будую старішу версію gcc на моїй машині Ubuntu (3.4.6 на машині 4.6.3). Я спробував @dhimod -disable-multilib рішення @ mahmood, але тоді пакет, який мені знадобився для використання 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 64bit


1
Щоб працювати зі старшою gcc / g ++, ви повинні забути Ubuntu, оскільки в новій версії Ubuntu ви не можете повністю виправити проблему, а старша Ubuntu з іншого боку вже не підтримується. Ви повинні використовувати системи на основі rehdat. Centos 6.3 гаразд
mahmood
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.