2016-04-29 8 views
0

こんにちは、 ".s"ファイルをリンクする際にいくつかのエラーが発生しています。アセンブリの.sとgccエラーのリンク

  • まず第一に、私は に"のgcc -S -m32 search.c"経由でファイルをコンパイルするには、私の32ビットのアセンブラコードを取得します。 「エラー:

  • は、第二に、私はこれを行う場合、私は次のエラーを取得する


検索search.s -o gccの」を使用して一緒に戻ってプログラムをリンクします: `push 'に無効な命令サフィックスがあります。
私は問題を解決するためにgoogleを使用しようとし、--32オプションフラグを使用して解決策を見つけました。しかし、これはどちらもうまくいかなかった。結果として次のエラーが表示されます。 usr/bin/ld:入力ファイルのi386アーキテクチャがi386:x86-64出力と互換性がありません。 3番目のオプションは.sファイルに.code32を追加することで、gccはコンパイルします。しかし、コンソールをすぐに実行すると、 "コアダンプされた"と表示されます。

私は本当に今何をすべきか分かりません。誰でも私は物事をどのように働かせるか考えていますか?

乾杯

+2

リンクにも '-m32'を使用してください。 – Jester

+0

それはとても簡単でした。どうもありがとうございました! – MrCotton

+1

[64ビットシステムでの32ビットバイナリのアセンブル(GNU toolchain)](http://stackoverflow.com/questions/36861903/assembling-32-bit-binaries-on-a-64bit- system-gnu-toolchain) –

答えて

2

--32で組み立て、そして-m32でリンクします。

のgcc -m32 -o -m32なければ

search.s検索し、出力は64ビットの実行可能になるだろう。エラーメッセージは、入力オブジェクトが32ビットオブジェクトであるためです。 32ビットオブジェクトから64ビットの実行ファイルを生成することはできません。

+0

ありがとう、それは働いた! – MrCotton

関連する問題