“/usr/include/stdio.h:27:10: фатальная ошибка: bits/libc-header-start.h: Нет такого файла или директории” при компиляции HTK

Вопрос или проблема

Я пытаюсь скомпилировать библиотеку 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. Не забудьте также проверить, что все установленные пакеты являются совместимыми и актуальными.

Если возникнут дополнительные вопросы, не стесняйтесь спрашивать.

Оцените материал
Добавить комментарий

Капча загружается...