当我使用命令“ nasm -f elf -l hello.lst hello.asm”时,我正在使用linux下的nasm assembler。它可以正常工作,但是当与gcc -o hello.o hello.o链接时,它会生成错误:

Hello.asm :(。text+0x4):重新定位截断为fit:r_386_16 files fit' .data'collect2:ld返回1退出状态

我了解到这是GCC和16位的问题

有解决方案吗?

有帮助吗?

解决方案

Linux甚至没有16位子系统 - 即使您有GCC可以链接它,您仍然无法执行它!你为什么不使用 .bits 32?

其他提示

几年前,我面临着同样的情况。

处理它的两种方法是:

  1. 编写自己的16位友好链接器(至少需要解析。
  2. 使用基本符号(或符号)手动计算绝对地址(仍创建.REL部分,但可以删除)。但是,此方法非常容易发生。

我总是最终做2,但我可能应该花时间编写一个链接器(或修补GNU LD ...)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top