«фатальная ошибка: bits / libc-header-start.h: такого файла или каталога нет» при компиляции HTK - PullRequest
0 голосов
/ 08 января 2019

При попытке запустить make в библиотеке HTK возникает следующая ошибка:

(cd HTKLib && make HTKLib.a) \
  || case "" in *k*) fail=yes;; *) exit 1;; esac;
make[1]: Entering directory '/home/william/speech/htk/HTK-3.4.1/htk/HTKLib'
gcc  -m32 -ansi -D_SVID_SOURCE -DOSS_AUDIO -D'ARCH="x86_64"' -Wall -Wno-switch -g -O2 -I. -DPHNALG   -c -o HGraf.o HGraf.c
In file included from HShell.h:40:0,
                 from HGraf.c:54:
/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory
 #include <bits/libc-header-start.h>
          ^~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
<builtin>: recipe for target 'HGraf.o' failed
make[1]: *** [HGraf.o] Error 1
make[1]: Leaving directory '/home/william/speech/htk/HTK-3.4.1/htk/HTKLib'
Makefile:96: recipe for target 'HTKLib/HTKLib.a' failed
make: *** [HTKLib/HTKLib.a] Error 1

Я не уверен, что делать с этой ошибкой. Файл libc-header-start.h присутствует в моей системе:

$ find /usr -name libc-header-start.h
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h

Запуск gcc -H -fsyntax-only /usr/include/stdio.h соответственно возвращает

. /usr/include/x86_64-linux-gnu/bits/libc-header-start.h
.. /usr/include/features.h
... /usr/include/x86_64-linux-gnu/sys/cdefs.h

и т.д.

Кроме того, компиляция и запуск C-файла для проверки работоспособности работает нормально (просто выполняется printf("hello!"); в его основном методе).

Извиняюсь, если это хорошо известная ошибка - мой опыт работы с библиотеками C останавливается на компиляции и установке их с использованием make.

UPDATE В соответствии с принятым ответом ниже я выполнил sudo apt-get install gcc-multilib, чтобы установить недостающие 32-битные библиотеки.

После этого я получил ошибку с похожей причиной: "/usr/bin/ld: cannot find -lX11" error when installing htk. Я решил эту проблему, выполнив sudo apt-get install libx11-dev:i386 libx11-dev, чтобы получить недостающую 32-битную библиотеку.

1 Ответ

0 голосов
/ 08 января 2019

-m32 указывает gcc на компиляцию для 32-битной платформы. На 64-битной машине gcc обычно поставляется только с 64-битными библиотеками. У вас есть два варианта:

  1. Установка 32-битных заголовков и библиотек. Вот как вы можете это сделать в Ubuntu: https://askubuntu.com/questions/91909/trouble-compiling-a-32-bit-binary-on-a-64-bit-machine
  2. Вместо этого скомпилируйте для 64-битной версии. Измените эту строку в файле с именем configure:

    CFLAGS="-m32 -ansi -D_SVID_SOURCE -DOSS_AUDIO -D'ARCH=\"$host_cpu\"' $CFLAGS"
    

    Удалить -m32, давая вам:

    CFLAGS="-ansi -D_SVID_SOURCE -DOSS_AUDIO -D'ARCH=\"$host_cpu\"' $CFLAGS"
    

    Выполнить ./configure, затем make clean, затем make

    Однако я бы не советовал делать это. Авторы библиотеки изо всех сил пытались сделать эту сборку для 32-битной системы на 64-битной системе, и она может работать неправильно, если вы измените это. (Хотя он компилируется.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...