【发布时间】:2020-09-29 16:04:09
【问题描述】:
我正在尝试在 Alpine Linux 上编译 Box86,这是一个使用 musl libc 实现而不是 glibc 的 Linux 发行版。在完成 46% 时,编译停止并出现以下错误:
/home/newbyte/box86/src/emu/x86syscall.c:124:11: error: '__NR_gettimeofday' undeclared here (not in a function); did you mean 'gettimeofday'?
124 | { 78, __NR_gettimeofday, 2 },
| ^~~~~~~~~~~~~~~~~
| gettimeofday
/home/newbyte/box86/src/emu/x86syscall.c:210:12: error: '__NR_clock_gettime' undeclared here (not in a function); did you mean 'clock_gettime'?
210 | { 265, __NR_clock_gettime, 2 },
| ^~~~~~~~~~~~~~~~~~
| clock_gettime
/home/newbyte/box86/src/emu/x86syscall.c:211:12: error: '__NR_clock_getres' undeclared here (not in a function); did you mean 'clock_getres'?
211 | { 266, __NR_clock_getres, 2 },
| ^~~~~~~~~~~~~~~~~
| clock_getres
自然,我的第一直觉是查找这些名称并弄清楚它们的用途,以便我找到合适的替代品,但我运气不佳,这导致我的问题是:这些是什么@987654326 @-前缀符号,它们有什么作用?
【问题讨论】:
-
它们不应该是函数,而是应该扩展为数字的宏,即系统调用号。您应该包含
<sys/syscall.h>以便将定义拉入。 -
@user414777 对,写到一半我意识到这些可能不是函数,并更改了我随后的措辞(但忘记更改标题)。谢谢。我会看看这是否有效。
-
@user414777 实际上,
<sys/syscall.h>似乎已经包含在内了? github.com/ptitSeb/box86/blob/master/src/emu/x86syscall.c#L7(我没有看到任何 ifndef:s 围绕它) -
那么你的系统头文件没有定义它们。并非所有平台和 linux 内核版本上都存在所有系统调用号。尝试 ifdef'ing 他们,例如
__NR_getrandom已经是了。但最好提交错误报告,以便他们修复代码。
标签: c linux compiler-errors glibc musl