6

こんにちは、コンピューターで単純な C プログラムをコンパイルしようとしていますが、コンパイル時にターミナルの下から同様のメッセージが表示され [画像を参照]、何らかのアセンブリ エラーが示されます。これがコンピューターのメモリ/スタックの問題なのか (コンピューターを再起動しましたが) なのか、それとも何か他のものなのかはわかりませんが、ここ数日、同じ方法で C プログラムをコンパイルしていることは確かです。

コード:

   #include <stdio.h>
   main(){
      printf("hello");
   }

出力:

/tmp/cconajAc.s: アセンブラー メッセージ: /tmp/cconajAc.s:9: エラー: 「プッシュ」のサフィックスまたはオペランドが無効です

これを修正する方法を教えてください!

編集済み: 別のコンピュータ ラボ ルームのワークステーションから変更したばかりで、アセンブリ エラーが発生することなく正常に動作します。私の推測では、別の実験室のコンピューターにインストールされている開発ツールのエラーであると思われます。今のところこれでうまくいくと思いますが、他のコンピューターで発生した問題の原因を知ることは興味深いでしょう.

4

5 に答える 5

1

エラーは奇妙に思えますが、戻り値の型を : に追加してみてmain()くださいint main()

于 2012-11-04T22:21:26.827 に答える
1

vi エディターで書き込み、ファイルを「hello.c」として保存します。

 #include <stdio.h>
 int main() {   printf("hello");   return 0; }

32 ビットの glibc ヘッダーがインストールされているかどうかを確認します。
インストールするには、ubuntuでこれを試してください:
# apt-get install gcc-multilib

次に試してください:
# gcc -m32 -o hello hello.c

# gcc Wa,--32そうしないと

# gcc -m32 --32

于 2012-11-04T22:38:08.280 に答える
0

エラー: `push' のサフィックスまたはオペランドが無効です

システムのアーキテクチャを確認してください:

# arch
x86_64   

# arch
i386

またはこれを使用します:

#uname -m 
x86_64

アセンブリ: 32bit(i386):

pushl instruction  ;notice the suffix is l

64ビット(x86_64):

pushq instruction  ;notice the suffix is q

sys のアーキテクチャが x86_64 なのかな、32bit の命令を使用するとこのエラーが発生します。この問題を解決するために:

#gcc -m32 -o test test.c

gcc の -m32 オプションをいつ使用する必要がありますか? を参照してください。

于 2014-08-20T03:19:27.433 に答える
0

それが他の誰かを助ける場合、私にとって、これはツールチェーンコンポーネントの不一致が原因であるように見えます-私は時々、私のものを変更する外部ドットファイルを調達しなければなりませんPATH(複雑なビルドシステムを満たすために、ため息)。アセンブラは でし/usr/bin/asgccが、古いバージョンでした。

于 2014-08-20T00:29:45.963 に答える