我正在尝试编译支持 x32 ABI 的 Linux 6.7.2,但我不明白这意味着什么:
Symbol: X86_X32_ABI [=n]
Type : bool
Defined at arch/x86/Kconfig:3007
Prompt: x32 ABI for 64-bit mode
Depends on: X86_64 [=y] && n
Location:
(3) -> Binary Emulations
-> x32 ABI for 64-bit mode (X86_X32_ABI [=n])
我如何摆脱n
inX86_64 [=y] && n
以便它实际上让我启用此选项?
引用的位置:arch/x86/Kconfig:3007:
表明 objcopy 的 LLVM 变体(而不是“通常的”GNU 变体)无法正确地将某些对象从 x86_64 转换为 x86_x32。
因此添加了一个依赖于环境的测试来防止这种情况发生。
通常(GNU)
objcopy
会这样开始:LLVM 开始如下:
success
上面是一个在 Linux 源代码中定义的宏:所有这些都是
n
在使用 的 LLVM 变体objcopy
、失败依赖关系以及y
评估 时(当前应该意味着使用 GNU 变体)时得到的结果$(OBJCOPY) --version | head -n1 | grep -qv llvm
。另有说明:目前使用 Clang/LLVM 编译时无法获得 x86_x32 ABI 支持:请改用 GCC。