Как я могу собрать более старый gcc (в частности, 4.5.2) в Ubuntu 11.10 и избежать ошибок, связанных с "/ usr / bin / ld: not find crti.o: Нет такого файла или каталога"?
Я немного покопался и нашел несколько похожих предметов, но ни один из них не помог мне решить проблему:
- Я проверил, что все мои пакеты (libc6-dev и т. П.) Переустанавливаются по этому вопросу
- Я подтвердил, что crti.o существует в / usr / lib32 и / usr / lib / x86_64-linux-gnu, и что мой ld.so.conf настроен для просмотра в этих каталогах
- Я проверил, что добавление моего вызова make с помощью LIBRARY_PATH = / usr / lib / x86_64-linux-gnu работает, но хотел бы избежать этого (это становится расходящейся точкой в make-файлах)
- Я пробовал разные вещи с --with-build-sysroot, но безуспешно (читай: может быть, я просто не знаю правильный флаг для установки)
При работе с strace (согласно этому ответу ), я могу видеть голую ссылку на crti.o:
13240 open ("crti.o", O_RDONLY) = -1 ENOENT (нет такого файла или каталога)
Спасибо!
Даже очень новые версии GCC терпят неудачу с этим сообщением. Это связано с тем, что новые выпуски Debian / Ubuntu поддерживают (будут) поддержку multiarch (т.е. устанавливают двоичные файлы для нескольких машин в одной файловой системе), поэтому библиотеки были удалены из стандартных мест.
Есть GCC патчи исправить здесь (еще не утверждены окончательные варианты, но верно для Ubuntu), и они , вероятно , относятся к старшему НКУ без особых усилий, может быть. Я думаю, вам нужно настроить GCC с --enable-multiarch , или что-то еще.
В то же время, создание софт-ссылок является хорошим исправлением:
(имя папки будет отличаться в 32-разрядных установках).
Надеюсь, это поможет.
источник
Я решил эту проблему с помощью нескольких обходных путей, которые могут быть полезны для вас.
Сначала соберите GCC
LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
, чтобы процесс начальной загрузки сборки знал, где найтиcrt?.o
стартовые файлы.Затем, вместо создания
crt?.o
символических ссылок/usr/lib
там, где они влияют на всю вашу систему, вы можете создать символическую ссылку на эти три файла в${prefix}/lib/gcc/...
каталог, соответствующий${prefix}/bin
каталогу, в которомgcc
установлен исполняемый файл. На самом деле это почти наверху пути поиска начальных файлов, поэтому он их найдет - но они больше ни на что не влияют.В моем случае конкретный каталог для их размещения был
lib/gcc/x86_64-unknown-linux-gnu/4.3.2/
; Вы можете найти правильный, потому что у него уже есть другие файлы, какcrtbegin.o
в нем.источник
Я собрал GCC 4.1.2 на Ubuntu Precision x86_64. Как и вы, я взглянул на последнюю команду «xgcc», ища 32-битную среду выполнения c, grep-ped / 32 /, следующим образом. Моя среда выполнения C находится в / usr / lib32, которая предоставляется пакетом libc6-dev-i386.
Итак, я создал символические ссылки crt? .O в каталоге, который искал xgcc.
Я успешно построил GCC 4.1.2 с ним.
источник