linux下的16位链接

时间:2010-12-04 18:31:51

标签: linux gcc assembly nasm 16-bit

我在linux下使用NASM Assembler 当我使用命令“nasm -f elf -l hello.lst hello.asm”时 它工作正常 但当与gcc“gcc -o hello hello.o”链接时 它会产生错误:

hello.asm :(。text + 0x4):重定位被截断以适合:R_386_16对抗`.data' collect2:ld返回1退出状态

我了解到这是gcc和16位

的问题

任何解决方案?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

几年前我和今年再次面临同样的情况。

处理它的两种方法是:

  1. 编写自己的16位友好链接器(至少需要解析.rel.text部分)。
  2. 使用基本符号(或符号)手动计算绝对地址(.rel部分仍然创建,但可以删除)。但是,这种方法非常容易出错。
  3. 我总是最终做2,但我应该花些时间编写一个链接器(或修补GNU ld ......)。