在对此问题的评论中,内核空间 C 代码中简单指针算术的意外行为 https://stackoverflow.com/questions/49470691/unexpected-behaviour-in-simple-pointer-arithmetics-in-kernel-space-c-code,
Michael Petch 写道:“64 位 ELF 格式支持 32 位代码段。”
我有一个工作程序,其中包含 32 位和 64 位代码以及它们之间的切换。我一直无法弄清楚如何将编译器生成的 32 位和 64 位代码链接在一起而不出现链接器错误,因此所有 32 位代码都是用汇编语言编写的。随着项目变得更加复杂,32位汇编代码的维护也变得更加繁重。
这是我所拥有的:
test32.cc 编译为-m32
.
所有其他源文件都是在没有该标志的情况下编译的-mcmodel=kernel
.
在链接描述文件中:
OUTPUT_FORMAT("elf64-x86-64")
OUTPUT_ARCH(i386:x86-64)
在生成文件中:
LD := ld
LDFLAGS := -Map $(TARGET).map -n --script $(LDSCRIPT)
$(LD) $(LDFLAGS) -b elf32-x86-64 $(OBJS64) -b elf32-i386 $(OBJS32) -o $@
我收到错误:
ld: i386 architecture of input file 'test32.o' is incompatible with i386:x86-64 output
将 OUTPUT_ARCH 更改为 i386 会导致所有 64 位目标模块出现类似错误。
我在用着:
海湾合作委员会5.4.1
GNU ld(Ubuntu 的 GNU Binutils)2.26.1
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)