web-dev-qa-db-ja.com

HTKのコンパイル中に「致命的なエラー:bits / libc-header-start.h:そのようなファイルまたはディレクトリはありません」

HTKライブラリmakeを実行しようとすると、次の問題が発生します。

_(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 [〜#〜]以下の承認された回答に従って、不足している32ビットライブラリをインストールするために_Sudo apt-get install gcc-multilib_を実行しました。

その後、同様の原因でエラーが発生しました:_"/usr/bin/ld: cannot find -lX11" error when installing htk_。 _Sudo apt-get install libx11-dev:i386 libx11-dev_を実行して不足している32ビットライブラリを取得することで、これを解決しました。

17
William

-m32は、32ビットプラットフォーム向けにコンパイルするようにgccに指示しています。 64ビットマシンでは、gccには通常64ビットライブラリのみが付属しています。次の2つのオプションがあります。

  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を実行します

    ただし、これを行うことはお勧めしません。ライブラリの作成者は、64ビットシステムで32ビット用にこのビルドを作成するために手を尽くしており、これを変更すると正しく動作しない可能性があります。 (ただし、コンパイルは可能です。)

23
Nick ODell