2012-11-04 13 views
6

Hallo Ich versuche, einfache C-Programme in meinem Computer zu kompilieren, und ich bekomme die gleichen Nachrichten aus dem Terminal [siehe Bilder] beim Kompilieren, mit einer Art Montagefehler. Ich weiß nicht, ob dies ein Computerspeicher/Stack-Problem ist (obwohl ich meinen Computer neu gestartet habe) oder irgendetwas anderes, aber was ich sicher weiß, ist, dass ich C-Programme in den vergangenen Tagen auf die gleiche Weise kompiliert habe.Assembly-Fehler beim Kompilieren einer C-Datei unter Linux

Code:

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

Ausgang:

/tmp/cconajAc.s: Assembler-Nachrichten: /tmp/cconajAc.s:9: Fehler: Suffix oder Operanden ungültig für `Push‘

Bitte sagen Sie mir, wie Sie das beheben können!

EDITED: Ich habe gerade von der Workstation aus einen anderen Computerraum geändert und es funktioniert in Ordnung, ohne irgendwelche Montagefehler. Meine Vermutung wäre ein Fehler in den Entwicklungswerkzeugen, die in diesen Computern in dem anderen Laborraum installiert sind. Ich denke, für den Moment funktioniert das für mich, obwohl es interessant wäre, die Ursache des Problems zu kennen, das ich in dem anderen Computer hatte.

+1

Wie lautet Ihre Befehlszeile zum Kompilieren? –

+0

gcc -o test test.c – Ini

+1

Versuchen Sie 'gcc -m32 -o test test.c' –

Antwort

1

Der Fehler scheint seltsam, aber versuchen Sie, einen Rückgabetyp zu Ihrem main(): int main() hinzuzufügen.

+1

Ich habe eine Rückkehr 0 verwendet, aber der gleiche Fehler passiert – Ini

+1

@Ini Ich denke, er meinte, ändern Sie Ihre 'main' zu' int main' –

+0

Ja, ich meine, ich habe es versucht – Ini

1

schreiben in vi-Editor und die Datei als "hello.c" speichern:

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

Überprüfen Sie, ob Sie die 32-Bit-glibc Header installiert haben.
dieses Versuchen in ubuntu zu installieren:
# apt-get install gcc-multilib

Dann versuchen:
# gcc -m32 -o hello hello.c

# gcc Wa,--32 sonst hilft es jemand anderes für mich

# gcc -m32 --32

0

Im Fall scheint dies zu verursacht durch nicht übereinstimmende Toolchain-Komponenten - Ich muss manchmal externe dotfiles, die meineändern(um ein verschachteltes Bausystem zu befriedigen, Seufzer). Der Assembler war /usr/bin/as, aber gcc war eine alte Version.

0

Fehler: Suffix oder Operanden ungültig für `push‘

Ihre sys Architektur prüfen:

# arch 
x86_64 

# arch 
i386 

Oder verwenden Sie diese:

#uname -m 
x86_64 

In assembly: 32bit (i386):

pushl instruction ;notice the suffix is l 

64bit (x86_64):

pushq instruction ;notice the suffix is q 

ich Ihre sys-Bogen fragen, ist x86_64, wird es diesen Fehler zu erhöhen, wenn Sie 32-Bit-Anweisung verwenden. Um dieses Problem zu lösen:

#gcc -m32 -o test test.c 

-When should -m32 option of gcc be used? Siehe

0

die Schale sind Sie in während gcc laufen?

Versuchen Sie, zu tcsh/csh zu wechseln. Ich bekam denselben Fehler in der Bash und wechselte Shell zu Tcsh.

Verwandte Themen