Ответ 1
Я думаю, что пакет, который вы хотите, linux-libc-dev
. Я столкнулся с этим при создании 32-на-64; поэтому мне понадобилось linux-libc-dev:i386
.
При создании 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, и я не хочу этого.
Есть ли другой способ?
Я думаю, что пакет, который вы хотите, linux-libc-dev
. Я столкнулся с этим при создании 32-на-64; поэтому мне понадобилось linux-libc-dev:i386
.
Это сработало для меня:
ln -s /usr/include/asm-generic /usr/include/asm
Это сработало для меня:
sudo ln -s /usr/include/asm-generic /usr/include/asm
Причина того, что то, что GCC ожидает, будет называться /usr/include/asm
, переименовывается в /usr/include/asm-generic
в некоторых дистрибутивах.
/usr/include/asm/errno.h
является частью заголовков linux. Я не могу напрямую говорить с Ubuntu 12.04, но в общем вы можете скачать источники linux в качестве пакета для своего дистрибутива и не должны требовать загрузки/установки gcc. В противном случае вы можете вручную загрузить заголовки linux для версии вашего ядра (uname -a
) и использовать директиву include для CFLAGS, чтобы указать каталог для поиска.
Изменить: sudo apt-get install linux-headers-generic
может работать для вас.
Вам не хватает части пакетов разработки. Я не знаю Ubuntu, но вы должны иметь возможность попросить систему управления пакетами установить пакет, содержащий /usr/include/asm/errno.h
.
Не копируйте файл с похожим именем где-нибудь в вашей системе (или, что еще хуже, откуда-то еще). Отсутствующие файлы могут означать, что некоторые пакеты повреждены; снова попросите менеджера пакетов проверить все и (повторно) установить отсутствующие/сломанные фрагменты.
Если вы не запускаете выпуск LTS, обновите его. Вашему Ubuntu около 2 лет, то есть древнему.
Пока мы здесь, почему на этой прекрасной планете вы строите такой древний компилятор? Текущий GCC только что выпущен 4.9.0, все до 4.7 - это древняя история, более не поддерживаемая.
Если вы можете найти:
usr/include/asm-generic/errno.h
выполнив:
find /usr/include -name errno.h
затем попробуйте выполнить:
cp --archive /usr/include/asm-generic /usr/include/asm
Он может исправить эту проблему.
У меня возникла эта проблема при компиляции Asterisk 1.8.24.0 и она была решена с помощью:
mkdir /usr/include/asm-generic
cp /usr/include/asm/errno-base.h /usr/include/asm-generic/
Не знаю, правильно ли это, но я прочитал комментарии выше, и это дало мне идею... и это сработало:)