Вопрос или проблема
Я пытаюсь скомпилировать библиотеку HTK, но столкнулся с проблемами:
$ make all
(cd HTKLib && make HTKLib.a) \
|| case "" in *k*) fail=yes;; *) exit 1;; esac;
make[1]: Вход в каталог '/home/<path_removed_for_privacy>/htk/HTKLib'
gcc -m32 -ansi -D_SVID_SOURCE -DOSS_AUDIO -D'ARCH="x86_64"' -Wall -Wno-switch -g -O2 -I. -DPHNALG -UPHNALG -c -o HGraf.null.o HGraf.null.c
В файле, включенном из HShell.h:40,
из HGraf.null.c:25:
/usr/include/stdio.h:27:10: фатальная ошибка: bits/libc-header-start.h: Нет такого файла или каталога
27 | #include <bits/libc-header-start.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
компиляция прекращена.
Запуск dpkg -S libc-header-start.h
говорит мне:
libc6-dev:amd64: /usr/include/x86_64-linux-gnu/bits/libc-header-start.h
Хорошо. /usr/include/bits
должен быть символической ссылкой на /usr/include/x86_64-linux-gnu/bits
, но запуск dpkg -S /usr/include/bits
дает мне:
dpkg-query: не найден путь, соответствующий шаблону /usr/include/bits
Я изучил эту ошибку, и судя по всему, мне нужно установить gcc-multilib
, чтобы решить эту проблему. Но я тоже сталкиваюсь с проблемами с этим:
Следующие пакеты имеют неудовлетворенные зависимости:
gcc-multilib : Зависит: gcc-9-multilib (>= 9.3.0-3~), но он не будет установлен
Попытка установить gcc-9-multilib
приводит к дальнейшим проблемам с зависимостями. Изучая это, я нашел эту тему, где они решили проблему с gcc-multilib, но, к сожалению, это не сработало для меня. Я получаю те же проблемы с зависимостями, что и в оригинальном посте. Их решением было понизить версию libc6-dev
, запустив “sudo apt install libc6-dev=2.31-0ubuntu9.2
“. Когда я делаю это, мне говорят:
Чтение списков пакетов... Готово
Построение дерева зависимостей
Чтение информации о состоянии... Готово
libc6-dev уже является самой новой версией (2.31-0ubuntu9.2).
libc6-dev установлен вручную.
0 обновлено, 0 установлено новыми, 0 для удаления и 0 не обновлено.
Итак, у меня уже есть версия, которая решила их проблему, но моя проблема остается.
Буду признателен за любые предложения, как это решить, и, прежде всего, как запустить библиотеку HTK.
ИЗМЕНЕНИЕ:
Как запрашивалось в комментариях: apt policy gcc gcc-multilib gcc-9-multilib
:
gcc:
Установлено: 4:9.3.0-1ubuntu2
Кандидат: 4:9.3.0-1ubuntu2
Таблица версий:
*** 4:9.3.0-1ubuntu2 500
500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages
100 /var/lib/dpkg/status
gcc-multilib:
Установлено: (нет)
Кандидат: 4:9.3.0-1ubuntu2
Таблица версий:
4:9.3.0-1ubuntu2 500
500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages
gcc-9-multilib:
Установлено: (нет)
Кандидат: 9.3.0-17ubuntu1~20.04
Таблица версий:
9.3.0-17ubuntu1~20.04 500
500 http://archive.ubuntu.com/ubuntu focal-security/main amd64 Packages
500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages
9.3.0-10ubuntu2 500
500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages
Я наткнулся на это, и это сработало
https://wiki.crowncloud.net/?How_to_Install_GCC_on_Debian_11
После установки gcc,
перейдите в терминал и введите
gcc filename.c
./a.out
Ответ или решение
Ошибка при компиляции библиотеки HTK, с которой вы столкнулись, указывает на то, что заголовочный файл libc-header-start.h
не может быть найден. Это может быть связано с неправильной настройкой ваших инструментов разработки или с отсутствием необходимых библиотек. Давайте разберем шаги, которые помогут вам решить эту проблему.
1. Анализ ошибки
Согласно сообщению об ошибке:
/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory
Это говорит о том, что компилятор не может найти файл libc-header-start.h
, который должен находиться в каталоге /usr/include/bits
. Вы проверили, что у вас установлен пакет libc6-dev
, который должен содержать эти файлы, но не удалось найти соответствующий каталог /usr/include/bits
.
2. Проверка наличия символических ссылок
Проверьте, существует ли символическая ссылка для /usr/include/bits
. Если символическая ссылка отсутствует, создайте её:
sudo ln -s /usr/include/x86_64-linux-gnu/bits /usr/include/bits
3. Установка gcc-multilib
Установка gcc-multilib
является правильным подходом, если вы работаете с 32-битным кодом на 64-битной системе. Убедитесь, что вы установили все необходимые зависимости. Используйте следующую команду для установки:
sudo apt update
sudo apt install gcc-multilib
Если возникают проблемы с зависимостями, попробуйте:
sudo apt --fix-broken install
или:
sudo apt install -f
4. Устранение проблем с зависимостями
Если вы получаете ошибки с недостающими зависимостями, как указано:
gcc-multilib : Depends: gcc-9-multilib (>= 9.3.0-3~) but it is not going to be installed
попробуйте установить gcc-9-multilib
напрямую:
sudo apt install gcc-9-multilib
Если ошибка по-прежнему возникает, проверьте пакеты, которые могут блокировать установку, с помощью:
sudo apt-cache policy gcc gcc-multilib gcc-9-multilib
Это позволит вам увидеть, какие версии установлены и какие из них доступны.
5. Последовательность установки
Следуйте следующей последовательности, чтобы очистить и установить необходимые пакеты:
sudo apt update
sudo apt upgrade
sudo apt install gcc-9 gcc-9-multilib libc6-dev
sudo apt install gcc-multilib
6. Проверка версий и обновление
Если версии пакетов устарели, попробуйте обновить систему:
sudo apt dist-upgrade
7. Альтернативный способ установки
Если все вышеперечисленные шаги не решают вашу проблему, рассмотрите возможность использования контейнеризации через Docker, чтобы избежать конфликтов с библиотеками на вашей системе. Вы можете создать изолированное окружение с необходимыми версиями зависимостей там.
docker pull gcc:latest
docker run -it gcc:latest /bin/bash
Теперь у вас будет доступ к компилятору GCC без конфликтов с вашей текущей системой.
Заключение
Ошибки компиляции, подобные вашей, часто обусловлены неявными зависимостями или недостающими библиотеками. Следуя предложенным шагам, вы сможете устранить проблему с заголовочными файлами и успешно скомпилировать библиотеку HTK. Не забудьте также проверить, что все установленные пакеты являются совместимыми и актуальными.
Если возникнут дополнительные вопросы, не стесняйтесь спрашивать.