小编Com*_*ido的帖子

将16位实模式代码链接到符合Multiboot的ELF可执行文件时出现LD错误

我正在编写一个包含我的32位内核的Multiboot兼容的ELF可执行文件.我的主要问题是我在生成可执行文件时收到一系列链接器错误:

重定位被截断以适合:R_386_16对``.text'

链接器脚本,代码和构建脚本如下

我决定尝试在我的操作系统中实现VESA VBE图形.我在OSDev论坛中发现了一个现有的VESA驱动程序,我试图将它集成到我自己的操作系统中.我尝试将它添加到我的源目录,用NASM组装并将其链接到LD的最终可执行文件中.我收到的具体错误是:

vesa.asm:(.text+0x64): relocation truncated to fit: R_386_16 against `.text'
obj/vesa.o: In function `svga_mode':
vesa.asm:(.text+0x9d): relocation truncated to fit: R_386_16 against `.text'
vesa.asm:(.text+0xb5): relocation truncated to fit: R_386_16 against `.text'
obj/vesa.o: In function `done':
vesa.asm:(.text+0xc7): relocation truncated to fit: R_386_16 against `.text'
Run Code Online (Sandbox Code Playgroud)

导致错误的行(按顺序)如下:

mov ax,[vid_mode]
mov cx,[vid_mode]
mov bx,[vid_mode]
jmp 0x8:pm1
Run Code Online (Sandbox Code Playgroud)

我还评论了"链接器错误"的行

这是文件(vesa.asm):

BITS    32

global do_vbe

save_idt: dd 0
          dw 0
save_esp: dd 0
vid_mode: dw 0

do_vbe: …
Run Code Online (Sandbox Code Playgroud)

x86 assembly nasm ld osdev

4
推荐指数
1
解决办法
946
查看次数

标签 统计

assembly ×1

ld ×1

nasm ×1

osdev ×1

x86 ×1