2012-11-04 25 views
6

Ciao Sto cercando di compilare programmi C semplici nel mio computer e ottengo il msgs simile da sotto il terminale [vedi immagini] durante la compilazione, indicando una sorta di errore di assemblaggio. Non so se questo è un problema di memoria/stack del computer (anche se ho riavviato il mio computer) o altro, ma quello che so per certo è che ho compilato i programmi C in questi giorni passati nello stesso modo.Errore di assemblaggio durante la compilazione di un file C su Linux

Codice:

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

uscita:

/tmp/cconajAc.s: messaggi Assembler: /tmp/cconajAc.s:9: Errore: il suffisso o operandi non validi per `push'

Per favore dimmi come risolvere questo problema!

MODIFICATO: Sono appena passato dalla postazione di lavoro da un'altra stanza di laboratorio informatico e funziona perfettamente senza errori di assemblaggio. La mia ipotesi sarebbe un errore negli strumenti di sviluppo installati in quei computer nell'altra stanza del laboratorio. Immagino che per ora questo funzioni per me anche se sarebbe interessante conoscere la fonte del problema che avevo nell'altro computer.

+1

Qual è la tua riga di comando per la compilazione? –

+0

gcc -o test test.c – Ini

+1

Prova 'gcc -m32 -o test test.c' –

risposta

1

L'errore sembra strano ma prova ad aggiungere un tipo di ritorno al tuo main(): int main().

+1

Ho usato un return 0, ma lo stesso errore succede – Ini

+1

@Ini Penso che intendesse cambiare il tuo 'main' in' main1 –

+0

Sì, volevo dire che l'ho provato – Ini

1

Scrittura nel editor vi e salvare il file come "hello.c":

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

Verificare se avete le intestazioni a 32 bit glibc installati.
Prova questa in Ubuntu da installare:
# apt-get install gcc-multilib

Quindi provare:
# gcc -m32 -o hello hello.c

# gcc Wa,--32 altro

# gcc -m32 --32

0

In caso aiuta chiunque altro, per me, questo sembra essere causato da componenti della toolchain non corrispondenti: a volte devo trovare file dotfil esterni che modificano il mio PATH (per soddisfare un sistema di costruzione contorto, sospiro). L'assemblatore era /usr/bin/as, ma gcc era una versione antica.

0

Errore: il suffisso o operandi non validi per `push'

Controllare l'architettura del sys:

# arch 
x86_64 

# arch 
i386 

o utilizzare questo:

#uname -m 
x86_64 

Nel montaggio: 32bit (i386):

pushl instruction ;notice the suffix is l 

64bit (x86_64):

pushq instruction ;notice the suffix is q 

mi chiedo arco dei vostri sys è x86_64, intende sollevare questo errore quando si utilizza l'istruzione di 32 bit. per risolvere questo problema:

#gcc -m32 -o test test.c 

Fare riferimento alla When should -m32 option of gcc be used?

0

quale shell sei in durante l'esecuzione di gcc?

Provare a passare a tcsh/csh. Stavo ottenendo lo stesso errore in bash e commuta shell in tcsh.

Problemi correlati