質問

コマンド「nasm -f elf -l hello.lst hello.asm」を使用すると、Linuxの下でNASMアセンブラーを使用していますが、gccとリンクする場合はgcc -o hello hello.o "エラーを生成します。

hello.asm :(。テキスト+0x4):適合するように切り捨てられた再配置: `.data 'collect2に対するr_386_16

これはGCCと16ビットの問題であることを学びました

解決策はありますか?

役に立ちましたか?

解決

Linuxには16ビットのサブシステムさえありません - GCCがリンクするためにGCCを持っていても、実行できませんでした!使用してみませんか .bits 32?

他のヒント

私は数年前と今年も同じ状況に直面しました。

それに対処する2つの方法は次のとおりです。

  1. 独自の16ビットフレンドリーリンカーを作成します(少なくとも.rel.Textセクションを解析する必要があります)。
  2. ベースシンボル(またはシンボル)を使用して、絶対アドレスを手動で計算します(.relセクションはまだ作成されますが、削除できます)。ただし、この方法は非常にエラーが発生しやすいです。

私は常に2を実行することになりますが、おそらくリンカーを書く時間を作る必要があります(またはGNU LD ...)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top