try 在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编译和安装它们.

UPDATE 根据下面接受的答案,我执行了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位库,从而解决了这个问题.

推荐答案

-m32告诉GCC要编译成32位平台.在64位机器上,GCC通常只附带64位库.您有两个 Select :

  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位版本,如果您更改了这一点,它可能无法正常工作.(不过,它确实可以编译.)

C++相关问答推荐

Mbed TLS:OAEP的就地en—/decryption似乎不起作用'

如何在C宏中确定Windows主目录?

将指针作为参数传递给函数

如何跨平台处理UTF-16字符串?

为什么GCC在每次循环迭代时都会生成一个数组的mov&S使用[]访问数组?(-03,x86)

C中的指针增量和减量(*--*++p)

如何捕捉只有换行符或空格字符缓冲区的边缘大小写

为什么我可以在GCC的标签后声明变量,但不能声明Clang?

用C语言计算文本文件中的整数个数

如何按顺序将所有CSV文件数据读入 struct 数组?

等同于铁 rust 的纯C语言S未实现!()宏

如何使用唯一数字对整型进行分区

如何在C++中安全地进行浮点运算

C标准关于外部常量的说明

在文件描述符上设置FD_CLOEXEC与将其传递给POSIX_SPOWN_FILE_ACTIONS_ADCLOSE有区别吗?

为什么我在我的代码中得到错误和退出代码-1073741819(0xC0000005),但如果我添加了一个不相关的打印语句,它仍然有效?

挥发性语义的形式化理解

我的代码可以与一个编译器一起使用,但不能与其他编译器一起使用

C循环条件内的函数

米斯拉映射到 klocwork 违规行为