【发布时间】:2019-06-02 14:15:49
【问题描述】:
尝试在HTK library 上运行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 文件也可以正常工作(只需在其 main 方法中执行 printf("hello!");)。
如果这是一个众所周知的错误,我们深表歉意 - 我对 C 库的体验仅限于使用 make 编译和安装它们。
更新
根据下面接受的答案,我执行了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 位库解决了这个问题。
【问题讨论】:
-
这是 64 位还是 32 位系统? (即
uname -a的输出是什么?) -
您显示的 gcc 调用是
gcc -m32,它告诉 gcc 编译 32 位二进制文件。为此,它不会在/usr/include/x86_64-linux-gnu/中查找头文件,因为该目录(正如其名称所暗示的)包含 64 位构建的头文件。