2010-12-04 47 views
2

我使用NASM汇编链接,当我使用命令“NASM -f -l精灵hello.lst hello.asm” 它与海湾合作委员会“GCC链接时工作正常 但 - ø你好hello.o” 它产生一个错误:16位linux下 linux下

hello.asm :(文本+为0x4):重定位截断以适应:R_386_16针对`。数据” collect2:LD返回1退出状态

我了解到这是gcc和16位的一些问题

any soluti ons?

+1

你的gcc安装是否有一个16位的默认运行时库? – 2010-12-04 19:04:17

+1

看起来你缺少交叉编译器工具链的各个部分。 – 2010-12-04 23:58:03

回答

2

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

0

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

两种方法来对付它是:

  1. 自己写的16位友好的连接(你至少需要解析.rel.text部分)。
  2. 使用一个基本符号(或多个符号)手动计算绝对地址(.rel节仍然创建,但可以删除)。但是,这种方法非常容易出错。

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