针对程序集系统调用的错误不受支持的重定位

Error unsupported relocate against assembly system call

我正在尝试为 powerpc freescale 评估板交叉编译 glibc-2.18。

在构建的某个阶段出现以下错误:

    glibc
Failed:
 ../sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S: Assembler messages:
 ../sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S:40: Error: unsupported relocation against swapcontext
 make[3]: *** [/home/user/Desktop/SmoothWall/bcutm/distrib/build/sources/glibc/glibc-2.18-compile/stdlib/setcontext.o] Error 1
 make[3]: Leaving directory  /home/user/Desktop/SmoothWall/bcutm/distrib/build/sources/glibc/glibc-2.18/stdlib'
 make[2]: *** [stdlib/subdir_lib] Error 2
 make[2]: Leaving directory `/home/user/Desktop/SmoothWall/bcutm/distrib/build/sources/glibc/glibc-2.18'
 make[1]: *** [all] Error 2
 make[1]: Leaving directory `/home/user/Desktop/SmoothWall/bcutm/distrib/build/sources/glibc/glibc-2.18-compile'

那里的 SYS_ify(swapcontext) 宏的计算结果应该是 __NR_swapcontext,这是 swapcontext 系统调用的编号。

__NR_swapcontext 是一个宏,而不是变量名 - 所以它应该已经被预处理器解析(参见 asm/unistd.h)。看起来你没有这个定义,所以它没有被预处理到系统调用号,所以给你留下了一个未解析的变量名。

所以,您的问题是缺少 __NR_swapcontext 的定义,它应该由 glibc 编译所针对的内核 headers 提供。你有正确的内核 headers 可用吗?

由于 swapcontext 是一个 powerpc-only 系统调用,您可能正在尝试针对构建机器的 headers 编译 glibc。