William
Recibo el siguiente problema al intentar ejecutar make
sobre el biblioteca 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
No estoy seguro de qué hacer con este error. Él libc-header-start.h
El archivo está presente en mi sistema:
$ find /usr -name libc-header-start.h
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h
Corriendo gcc -H -fsyntax-only /usr/include/stdio.h
devuelve apropiadamente
. /usr/include/x86_64-linux-gnu/bits/libc-header-start.h
.. /usr/include/features.h
... /usr/include/x86_64-linux-gnu/sys/cdefs.h
etc.
Además, compilar y ejecutar un archivo C de verificación de cordura funciona bien (simplemente ejecutando printf("hello!");
en su método principal).
Disculpas si se trata de un error conocido: mi experiencia con las bibliotecas C se limita a compilarlas e instalarlas usando make
.
ACTUALIZAR
Según la respuesta aceptada a continuación, ejecuté sudo apt-get install gcc-multilib
para instalar las bibliotecas de 32 bits que faltan.
Posteriormente recibí un error con una causa similar: "/usr/bin/ld: cannot find -lX11" error when installing htk
. Resolví esto ejecutando sudo apt-get install libx11-dev:i386 libx11-dev
para recuperar la biblioteca de 32 bits que falta.
Nick ODell
Él -m32
le dice a gcc que compile para una plataforma de 32 bits. En una máquina de 64 bits, gcc normalmente solo viene con bibliotecas de 64 bits. Tienes dos opciones:
-
Instale encabezados y bibliotecas de 32 bits. Así es como harías esto en Ubuntu.
Ejecute este comando:
sudo apt-get install gcc-multilib
-
Compile para 64 bits en su lugar. Modifique esta línea en el archivo llamado
configure
:CFLAGS="-m32 -ansi -D_SVID_SOURCE -DOSS_AUDIO -D'ARCH=\"$host_cpu\"' $CFLAGS"
Borrar
-m32
dandote:CFLAGS="-ansi -D_SVID_SOURCE -DOSS_AUDIO -D'ARCH=\"$host_cpu\"' $CFLAGS"
Correr
./configure
entoncesmake clean
entoncesmake
Sin embargo, no sugeriría hacer esto. Los autores de la biblioteca hicieron todo lo posible para hacer esta compilación para 32 bits en un sistema de 64 bits, y es posible que no funcione correctamente si cambia esto. (Sin embargo, compila).
-
Consejo para mejorar tu google-fu: la parte más importante para encontrar una solución es buscar la parte correcta de tu mensaje de error. Si hubiera buscado “bits/libc-header-start.h: No such file or directory”, habría encontrado a otras personas con el mismo problema.
– Nick ODell
8 de enero de 2019 a las 16:13
-
para no sonar argumentativo, pero probé exactamente esa cadena de búsqueda y no fue sencillo obtener esta solución particular de los resultados de Google (sin el beneficio de la retrospectiva)
– William
8 de enero de 2019 a las 16:51
-
Ah, OK. Eso suena bastante frustrante. Bueno, gracias por investigar esto de antemano. Te lo agradezco.
– Nick ODell
8 de enero de 2019 a las 17:38
¿Es este un sistema de 64 o 32 bits? (es decir, ¿cuál es la salida de
uname -a
?)– Nick ODell
7 de enero de 2019 a las 22:09
La invocación gcc que muestras es
gcc -m32
, que le dice a gcc que compile un binario de 32 bits. Para ello, no buscará archivos de cabecera en/usr/include/x86_64-linux-gnu/
porque ese directorio (como indica su nombre) contiene encabezados para compilaciones de 64 bits.– rico
7 de enero de 2019 a las 22:23