web-dev-qa-db-fra.com

Lancer les étapes de gcc, compilateur, assembleur, relier

Si vous avez un programme simple en C, comme

int main(void) {return 0;}

Il peut être compilé avec gcc -o test test.c.

Si je comprends bien, gcc effectue la compilation, l’assemblage, puis la liaison. Les deux dernières étapes sont réalisées en exécutant as et ld.

Je peux générer le code d'assemblage à l'aide de gcc -S test.c.

Que voudriez-vous taper dans un terminal pour convertir le code d'assemblage en un exécutable?

(la raison de le faire est d'apprendre l'Assemblée)

26
checkers

Ce sont les différentes étapes utilisant gcc

gcc -E  --> Preprocessor, but don't compile
gcc -S  --> Compile but don't assemble
gcc -c  --> assemble but don't link
gcc with no switch will link your object files and generate the executable
53
quicoju

gcc test.s -o test compilera la test de test.s pour vous.

NASM pourrait également valoir votre temps - il serait peut-être plus facile/plus convivial que gcc de compiler Assembly.

3
sarnold

Une fois que vous avez fait gcc -S -o test.s test.c, tapez gcc -o test test.s.

1
Kerrek SB

Comme vous le savez peut-être ou non, les quatre étapes de la compilation consistent à pré-traiter (-E), à compiler à Assembly (-S), à assembler en code objet (-c) et enfin à lier. Le plus difficile pour moi était de savoir comment utiliser la sortie du préprocesseur. Voici comment le faire:

gcc -E hello.c | gcc -S -xc -o hello.s -
gcc -c hello.s -o hello.o
gcc hello.o -o hello
0
Brian H

Vous pouvez avoir gcc démarrer et arrêter le processus de compilation où vous voulez. gcc test.s -o test le compilera test.s depuis l’assemblage dans un exécutable.

0
Kevin