我正在尝试在 64 位 Kubuntu 14.04 上编译 strace 4.19,但编译失败并出现以下错误:
/usr/include/linux/errno.h:1:23: fatal error: asm/errno.h: No such file or directory
我能够将问题重现到编译测试 C 源的问题:
#include <errno.h>
它使用 GCC 选项编译得很好-m32
,-m64
但由于上面提到的错误而失败-mx32
:
$ gcc -c -x c -mx32 - <<< '#include <errno.h>'
In file included from /usr/include/bits/errno.h:24:0,
from /usr/include/errno.h:35,
from <stdin>:1:
/usr/include/linux/errno.h:1:23: fatal error: asm/errno.h: No such file or directory
compilation terminated.
我假设我缺少一些asm/errno.h
为 x32 ABI 提供的包。这个包是什么?
我查看的另一个问题并没有解决这个问题:我已经尝试了接受的答案所建议的内容,但它根本没有改变任何东西。此外,它甚至不适用于没有任何自动工具构建的纯 GCC。另一个答案只是一个肮脏的黑客,我不知道如何破坏 strace 构建。此外,另一个问题没有提到 x32,这是这个问题的核心。
要解决此问题,必须启用对 gcc 中 x32 ABI 的支持。
gcc-multilib 包将通过 /usr/include/linux/asm 符号链接提供。作为参考,这是在提供上述信息的 debian 错误中看到的。https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=871946