Как вы создаете более старые версии gcc? Ошибки о crti.o не найдены

Лучше связаться с поставщиком услуг

Попробуйте выбрать аналогичную услугу (предоставляя такие же модемы и пакеты услуг) в вашем округе.

1
задан 23 May 2017 в 15:39

3 ответа

Даже очень новые версии GCC завершаются с этим сообщением. Это связано с тем, что новый Debian / Ubuntu поддерживает (поддерживает) многоархиво (т.е. устанавливает двоичные файлы для нескольких машин в одной файловой системе), поэтому библиотеки были удалены из стандартных мест.

Есть GCC-патчи (это еще не утвержденные окончательные версии, но верно для Ubuntu), и они, вероятно, могут применяться к более старым GCC без особых усилий. Я думаю, вам нужно настроить GCC с помощью --enable-multiarch или что-то в этом роде.

Тем временем создание бесплатных ссылок является хорошим исправлением:

cd /usr/lib
ln -s x86_64-linux-gnu/crt*.o .

(имя папки будет отличаться от 32-разрядных установок).

Надеюсь, что это поможет.

9
ответ дан 25 May 2018 в 17:15
  • 1
    Спасибо за то, что он был многократным. Я надеялся на разрешение «почему», он прекратил работать. – Matt 15 November 2011 в 00:37

Я решил эту проблему с несколькими обходными решениями, которые могут быть полезны для вас.

Сначала создайте GCC с помощью LIBRARY_PATH=/usr/lib/x86_64-linux-gnu, чтобы процесс сборки bootstrap знал, где найти начало crt?.o файлы.

Затем вместо создания crt?.o символических ссылок в /usr/lib, где они влияют на всю вашу систему, вы можете символизировать эти три файла в каталоге ${prefix}/lib/gcc/..., соответствующем директории ${prefix}/bin, которая Установлен исполняемый файл gcc. Фактически он находится почти в начале пути поиска для стартовых файлов, поэтому он найдет их, но они ничего не влияют.

В моем случае, конкретный каталог для их размещения был lib/gcc/x86_64-unknown-linux-gnu/4.3.2/; вы можете найти правильный, потому что в нем уже есть другие файлы, такие как crtbegin.o.

2
ответ дан 25 May 2018 в 17:15

Я построил GCC 4.1.2 на точной x86_64 Ubuntu. Как вы это сделали, я взглянул на strace последней команды «xgcc», которая ищет 32-битную c runtime, grep-ped / 32 / следующим образом. C runtime in mine находится в / usr / lib32, который предоставляется пакетом libc6-dev-i386.

fgrep /32/ strace-output.txt | grep /usr/lib | head -1
access("/usr/lib/gcc/x86_64-unknown-linux-gnu/4.1.2/32/crti.o", R_OK) = -1 ENOENT (No such file or directory)

Итак, я создал символические ссылки crt? .o в каталоге xgcc, который вы искали.

sudo mkdir -p /usr/lib/gcc/x86_64-unknown-linux-gnu/4.1.2/32
cd /usr/lib/gcc/x86_64-unknown-linux-gnu/4.1.2/32
sudo ln -s /usr/lib32/crt1.o 
sudo ln -s /usr/lib32/crtn.o 
sudo ln -s /usr/lib32/crti.o 

Я успешно с ним построил GCC 4.1.2.

1
ответ дан 25 May 2018 в 17:15

Другие вопросы по тегам:

Похожие вопросы: