WedX - журнал о программировании и компьютерных науках

asm/errno.h: Нет такого файла или каталога

При сборке gcc я получаю эту ошибку:

In file included from /usr/include/bits/errno.h:25,
             from /usr/include/errno.h:36,
             from ../.././gcc/tsystem.h:96,
             from ../.././gcc/crtstuff.c:68:
/usr/include/linux/errno.h:4:23: error: asm/errno.h: No such file or directory
make[2]: *** [crtbegin.o] Error 1
make[2]: Leaving directory `/opt/gcc-4.1.2/host-x86_64-unknown-linux-gnu/gcc'

Я собираю gcc 4.1 из исходников. Думаю, мне нужно установить build-essential. Однако установка этого пакета в Ubuntu 12.04 автоматически загрузит и установит gcc 4.6, а я этого не хочу.

Есть ли другой способ?

10.02.2013

  • та же проблема, когда я перекрестно компилирую для s390 на x86 sles1032bit В файле, включенном из /var/tmp/toolchain/experiment_2/sysroot.s390x/usr/include/errno.h:35:0, из /var/tmp/toolchain/experiment_2/ gcc-4.8.5/libgcc/../gcc/tsystem.h:93, из /var/tmp/toolchain/experiment_2/gcc-4.8.5/libgcc/libgcc2.c:27: /var/tmp/toolchain/ Experiment_2/sysroot.s390x/usr/include/bits/errno.h:24:26: фатальная ошибка: linux/errno.h: нет такого файла или каталога # include ‹linux/errno.h› ^ компиляция прекращена. make[4]: *** [_negdi2.o] Ошибка 1 29.01.2017

Ответы:


1

Я думаю, что вам нужен пакет linux-libc-dev . Я столкнулся с этим при сборке 32-на-64; поэтому мне нужно linux-libc-dev:i386 .

24.04.2014
  • Оба установлены на Ubuntu 15.10, diff -ur /usr/include/x86_64-linux-gnu/asm/ /usr/include/i386-linux-gnu/asm/ не показывает различий. Некоторые другие файлы за пределами этих каталогов предоставляются обоими пакетами, но, по-видимому, это нормально, и у вас есть только несколько копий этих 62 файлов на общую сумму ~ 340 КБ. dpkg -L linux-libc-dev | diff -ur - <(dpkg -L linux-libc-dev:i386) показывает, что оба пакета предоставляют одни и те же файлы за пределами каталога include, специфичного для архитектуры. 04.05.2016
  • Поэтому, если вы собираетесь использовать символическую ссылку вместо того, чтобы радовать менеджера пакетов установкой linux-libc-dev:i386 в 64-битной системе, используйте ln -s x86_64-linux-gnu /usr/include/i386-linux-gnu для создания относительной символической ссылки. 04.05.2016
  • Спасибо! Я столкнулся с этим при сборке компилятора LLVM-rt. Мне не хватало linux-libc-dev:i386. 02.06.2020

  • 2

    Это сработало для меня:

    ln -s /usr/include/asm-generic /usr/include/asm
    
    20.10.2014
  • Действительно, это похоже на то, что вы получите, если сделаете apt-get install gcc-multilib (apt-file search /usr/include/asm показывает этот пакет), а в моей системе, где он установлен, /usr/include/asm будет символической ссылкой. Не уверен, зависит ли этот пакет от build-essential или нет. 27.07.2015

  • 3

    Это сработало для меня:

    sudo ln -s /usr/include/asm-generic /usr/include/asm
    

    Причина в том, что то, что GCC ожидает назвать /usr/include/asm, в некоторых дистрибутивах переименовано в /usr/include/asm-generic.

    03.08.2016
  • Спасибо. Я думаю, никто не заботится достаточно, чтобы исправить это. Разве они не запускают свои собственные установщики в дистрибутивах? 16.03.2017
  • Да, я могу подтвердить, что это работает для меня с n0000bunt00. 07.12.2018

  • 4

    Это исправило это для меня.

    sudo apt-get install linux-libc-dev:i386
    
    21.04.2018
  • E: Не удалось найти пакет linux-libc-dev:386. 07.12.2018

  • 5

    /usr/include/asm/errno.h является частью заголовков Linux. Я не могу напрямую говорить об Ubuntu 12.04, но в целом вы можете загрузить исходники Linux в виде пакета для своего дистрибутива, и вам не потребуется загружать/устанавливать gcc. В противном случае вы можете вручную загрузить заголовки linux для версии вашего ядра (uname -a) и использовать директиву include для CFLAGS, чтобы указать каталог для их поиска.

    Изменить: sudo apt-get install linux-headers-generic может работать на вас.

    10.02.2013
  • мое ядро ​​3.2.0-24-универсальное. apt-get install linux-headers-3.2.0-2 показывает, что он установлен. apt-get install linux-headers-generic загрузит linux-headers-3.2.0-37, что неверно 10.02.2013
  • Я бы попробовал несколько вещей. Одним из них является find /usr/include -name errno.h, чтобы увидеть, не скрывается ли он в каталоге конкретной версии. Другой — посмотреть в /usr/src/, чтобы убедиться, что у вас загружен исходный код ядра; если нет, посмотрите, есть ли пакет для его загрузки (например, linux-sources?). Когда найдете, укажите на него с помощью CFLAGS -I/path/to/src/include. 12.02.2013

  • 6

    Вам не хватает части пакетов разработки. Я не знаком с Ubuntu, но вы должны иметь возможность попросить его систему управления пакетами установить пакет, содержащий /usr/include/asm/errno.h.

    Не копируйте какой-либо файл с похожим именем откуда-либо в вашей системе (или, что еще хуже, откуда-то еще). Отсутствие файлов может означать, что какой-то пакет поврежден; еще раз, попросите вашего менеджера пакетов проверить все и (пере)установить отсутствующие/сломанные части.

    Если вы не используете какую-либо версию LTS, обновите ее. Вашей Ubuntu каких-то 2 года, т.е. древняя.

    Пока мы на этом, почему на этой прекрасной планете вы строите такой древний компилятор? Текущий GCC только что выпустил 4.9.0, все, что раньше 4.7, является древней историей, больше не поддерживается.

    24.04.2014

    7

    Это решило эту проблему для меня в Debian 10, хотя я компилировал с помощью компилятора на основе LLVM:

    sudo apt install gcc-multilib
    
    17.04.2020

    8

    В Ubuntu 16.04 x86_64 вы можете попробовать это:

    ln -s /usr/include/x86_64-linux-gnu/asm /usr/include/asm
    

    Это работает на моем сервере.

    13.03.2019

    9

    Если вы хотите использовать errno.h из ассемблерного файла, просто перейдите в /usr/(ctrl + l, введите /usr/) и найдите errno.h и errno-base.h. Как только вы их найдете, скопируйте код из этих двух файлов и поместите их в свою включаемую папку. И будьте осторожны, в «errno.h» файл включает «errno-base.h» как:

    #include <asm-generic/errno-base.h>
    

    Либо создайте каталог с тем же именем, что и выше, либо измените приведенный выше код на что-то другое, подходящее для вас.

    05.01.2020

    10

    Если вы можете найти:

    usr/include/asm-generic/errno.h

    выполнив:

    find /usr/include -name errno.h

    затем попробуйте выполнить:

    cp --archive /usr/include/asm-generic /usr/include/asm

    Это может решить эту проблему.

    03.07.2014

    11

    У меня была эта проблема при компиляции Asterisk 1.8.24.0, и я решил ее с помощью:

    mkdir /usr/include/asm-generic
    cp /usr/include/asm/errno-base.h /usr/include/asm-generic/
    

    Не знаю, "правильный ли это путь", но я прочитал комментарии выше, и это дало мне идею... и это сработало :)

    02.11.2013
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]