2013-04-14 14 views
11

こんにちは私が書いているコンパイラ用のx86アセンブリを生成していて、64ビットVM(アセンブリコードは32ビット)上のファイルをリンクする際に問題があります。GNUリンカに32ビットELF実行ファイルを生成させよう

私は、このコマンドを使用して、オブジェクトファイルの罰金を組み立てることができました:

as --32 mult.S -o mult.o 

が、私はそれが32ビットELFファイルを生成しますldための任意のオプションを見つけるように見えることはできません。

ld <some-option?> mult.o -o mult 

助けがあれば助かります。

答えて

19

ld <some-option?> mult.o -o mult

ld -m elf_i386 mult.o -o mult 

あなたはで利用可能アーキテクチャのリストを取得することができます。

ld -V 

サンプル出力:しかし

GNU ld (GNU Binutils for Ubuntu) 2.24 
    Supported emulations: 
    elf_x86_64 
    elf32_x86_64 
    elf_i386 
    i386linux 
    elf_l1om 
    elf_k1om 
    i386pep 
    i386pe 

、すべきではありません必要:ld l最初のオブジェクトにooksを追加し、そのオブジェクトのフォーマットに基づいて自動的にエミュレーションを選択する必要があります。

+1

ありがとう、私は実際に数分前にこれを見つけました。私はそれが 'ld'がやろうとしていることを期待していましたが、なんらかの理由でそれでも私は不一致のアーキテクチャを持っていたと言いました。 –

+0

「elf32_x86_64」や「i386linux」、「elf_l1om」のような難しいものを説明することはできますか? –

+0

elf_i386は何をしていますか?私はマニュアルで検索しましたが見つかりませんでした – paradox

関連する問題