Linuxの下での16ビットリンク
質問
コマンド「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つの方法は次のとおりです。
- 独自の16ビットフレンドリーリンカーを作成します(少なくとも.rel.Textセクションを解析する必要があります)。
- ベースシンボル(またはシンボル)を使用して、絶対アドレスを手動で計算します(.relセクションはまだ作成されますが、削除できます)。ただし、この方法は非常にエラーが発生しやすいです。
私は常に2を実行することになりますが、おそらくリンカーを書く時間を作る必要があります(またはGNU LD ...)。
所属していません StackOverflow