尝试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
Run Code Online (Sandbox Code Playgroud)
我不确定该怎么办。该libc-header-start.h文件存在于我的系统上:
$ find /usr -name libc-header-start.h
/usr/include/x86_64-linux-gnu/bits/libc-header-start.h
Run Code Online (Sandbox Code Playgroud)
运行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
Run Code Online (Sandbox Code Playgroud)
等等
同样,编译和运行健全性检查C文件也可以正常工作(只需printf("hello!");在其main方法中执行)。
抱歉,如果这是一个众所周知的错误-我对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位库来解决此问题。
akh*_*han 18
以下是调试和解决此问题的一种方法。由于大多数 Linux 安装都存在这样或那样的差异,YMMV。
libc-header-start.h。$ dpkg -S libc-header-start.h
libc6-dev:amd64: /usr/include/x86_64-linux-gnu/bits/libc-header-start.h
Run Code Online (Sandbox Code Playgroud)
在工作系统上,/usr/include/bits是 的符号链接/usr/include/x86_64-linux-gnu/bits。运行 dpkg 搜索给我们:
$ dpkg -S /usr/include/bits
libc6-dev-i386: /usr/include/bits
Run Code Online (Sandbox Code Playgroud)
安装libc6-dev-i386会创建符号链接并解决错误。
然而,随后我遇到了链接器错误,链接器无法找到 libgcc ( -lgcc)。显然,大多数情况下 Linux 默认链接器需要 libgcc。进一步调试启用链接器详细程度的问题导致我丢失lib32gcc-10-dev包。
简而言之,除非需要一个非常受控的构建环境,否则只需gcc-multilib在使用时安装软件包(或 -m32需要)。对于 C++,也是必需的。gccclangg++-multilib
Nic*_*ell 17
该-m32告诉GCC编译器的32位平台。在64位计算机上,gcc通常仅随附64位库。您有两种选择:
改为编译为64位。在名为的文件中修改此行configure:
CFLAGS="-m32 -ansi -D_SVID_SOURCE -DOSS_AUDIO -D'ARCH=\"$host_cpu\"' $CFLAGS"
Run Code Online (Sandbox Code Playgroud)
删除-m32,为您提供:
CFLAGS="-ansi -D_SVID_SOURCE -DOSS_AUDIO -D'ARCH=\"$host_cpu\"' $CFLAGS"
Run Code Online (Sandbox Code Playgroud)
运行./configure,然后make clean,然后make
但是,我不建议这样做。库作者竭尽全力在64位系统上构建32位版本,如果您更改此版本,它可能无法正常工作。(尽管它确实可以编译。)