2012-11-04 21 views
6

Witam Próbuję skompilować proste programy C w moim komputerze i otrzymuję podobne komunikaty pod terminalem [patrz obrazy] podczas kompilacji, podając błąd montażowy. Nie wiem, czy jest to problem z pamięcią komputera/stosem (mimo że zrestartowałem komputer) czy cokolwiek innego, ale wiem na pewno, że w przeszłości kompilowałem programy C w ten sam sposób.Błąd montażowy podczas kompilowania pliku C pod Linuksem

Kod:

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

wyjścia:

/tmp/cconajAc.s: Komunikaty Assembler: /tmp/cconajAc.s:9: Błąd: przyrostek lub nieprawidłowe argumenty dla `Push”

Proszę mi powiedzieć, jak to naprawić!

EDYTOWANA: Właśnie zmieniłem stanowisko pracy z innej pracowni komputerowej i działa poprawnie bez żadnych błędów montażowych. Przypuszczam, że byłby to błąd w narzędziach programistycznych zainstalowanych na tych komputerach w drugim pokoju laboratoryjnym. Myślę, że na razie działa to dla mnie, chociaż byłoby interesujące znać źródło problemu, który miałem na innym komputerze.

+1

Jaka jest linia poleceń do kompilacji? –

+0

gcc -o test test.c – Ini

+1

Wypróbuj 'gcc -m32 -o test test.c' –

Odpowiedz

1

Błąd wydaje się dziwny, ale spróbuj dodać typ zwrotu do swojej nazwy main(): int main().

+1

Użyłem zwrotu 0 jednak ten sam błąd się zdarza – Ini

+1

@Ini Myślę, że miał na myśli zmienić twoje 'główne' na' int główne' –

+0

Tak, miałem na myśli próbowałem to – Ini

1

Zapis w edytorze vi i zapisz plik jako "hello.c":

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

sprawdź czy masz nagłówki 32-bitowy glibc zainstalowane.
Spróbuj to w ubuntu zainstalować:
# apt-get install gcc-multilib

Następnie spróbuj:
# gcc -m32 -o hello hello.c

# gcc Wa,--32 inny

# gcc -m32 --32

0

W przypadku pomaga ktoś inny, dla mnie wydaje się, być spowodowane niedopasowanymi komponentami toolchain - czasami muszę pobierać zewnętrzne pliki dotfile, które modyfikują moją PATH (w celu zaspokojenia zawiłego systemu budowy, westchnienia). Asembler był /usr/bin/as, ale gcc była jakąś starą wersją.

0

Błąd: przyrostek lub operandy nieważne dla `Push”

Sprawdź architekturę swoich sys to:

# arch 
x86_64 

# arch 
i386 

Albo użyć tego:

#uname -m 
x86_64 

W zespole: 32bit (i386):

pushl instruction ;notice the suffix is l 

64bit (x86_64):

pushq instruction ;notice the suffix is q 

Zastanawiam łuk swoich sys jest x86_64, będzie podnieść ten błąd podczas korzystania z instrukcji 32bit za. Aby rozwiązać ten problem:

#gcc -m32 -o test test.c 

zobacz When should -m32 option of gcc be used?

0

których powłoka jesteś w podczas pracy gcc?

Spróbuj przełączyć na tcsh/csh. Otrzymałem ten sam błąd w bashu i przełączyłem powłokę na tcsh.

Powiązane problemy