не удается найти 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

Как я могу это исправить?

ОБНОВИТЬ:

После добавления этих

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
Mahmood
источник
Я получаю другие ошибки, о 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 (ибуклав), чтобы указать в правильном направлении.

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
hhlp
источник
Эта проблема решена. Однако новую ошибку я получаю. Пожалуйста, смотрите оригинальный пост
махмуд
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-битных библиотек (если не включена multi-lib). В этом случае вам нужно добавить оба пути /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).
Я пробовал решение @ mahmood --disable-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 64bit

Heartinpiece
источник
1
Чтобы работать с более старыми версиями gcc / g ++, вы должны забыть об Ubuntu, поскольку в более новой версии Ubuntu вы не можете полностью решить проблему, а более старая Ubuntu, с другой стороны, больше не поддерживается. Вы должны использовать системы, основанные на rehdat. С Centos 6.3 все в порядке
Махмуд