web-dev-qa-db-fra.com

"erreur fatale: bits / libc-header-start.h: aucun fichier ou répertoire de ce type" lors de la compilation de HTK

J'obtiens le problème suivant lorsque j'essaie d'exécuter make sur bibliothèque 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

Je ne sais pas quoi faire à propos de cette erreur. Le fichier libc-header-start.h Est présent sur mon système:

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

L'exécution de gcc -H -fsyntax-only /usr/include/stdio.h Renvoie correctement

. /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.

De plus, la compilation et l'exécution d'un fichier C sanity-check fonctionnent correctement (il suffit d'exécuter printf("hello!"); dans sa méthode principale).

Toutes mes excuses s'il s'agit d'une erreur bien connue - mon expérience avec les bibliothèques C s'arrête à les compiler et à les installer à l'aide de make.

[~ # ~] mise à jour [~ # ~] Selon la réponse acceptée ci-dessous, j'ai exécuté Sudo apt-get install gcc-multilib pour installer les bibliothèques 32 bits manquantes.

Ensuite, j'ai eu une erreur avec une cause similaire: "/usr/bin/ld: cannot find -lX11" error when installing htk. J'ai résolu ce problème en exécutant Sudo apt-get install libx11-dev:i386 libx11-dev Pour récupérer la bibliothèque 32 bits manquante.

17
William

Le -m32 indique à gcc de compiler pour une plate-forme 32 bits. Sur une machine 64 bits, gcc n'est normalement fourni qu'avec des bibliothèques 64 bits. Vous avez deux options:

  1. Installez des en-têtes et des bibliothèques 32 bits. Voici comment procéder sur Ubuntu: https://askubuntu.com/questions/91909/trouble-compiling-a-32-bit-binary-on-a-64-bit-machine
  2. Compilez plutôt en 64 bits. Modifiez cette ligne dans le fichier nommé configure:

    CFLAGS="-m32 -ansi -D_SVID_SOURCE -DOSS_AUDIO -D'Arch=\"$Host_cpu\"' $CFLAGS"
    

    Supprimer -m32, te donne:

    CFLAGS="-ansi -D_SVID_SOURCE -DOSS_AUDIO -D'Arch=\"$Host_cpu\"' $CFLAGS"
    

    Courir ./configure, puis make clean, puis make

    Cependant, je ne suggérerais pas de faire cela. Les auteurs de la bibliothèque ont fait tout leur possible pour créer cette version pour 32 bits sur un système 64 bits, et cela pourrait ne pas fonctionner correctement si vous changez cela. (Il compile cependant.)

23
Nick ODell