Μεταγλώττιση και Σύνδεση Προγράμματος

Πηγαίο πρόγραμμα Μεταγλωττιστής (Compiler) Συμβολομεταφραστής (Assembler) Συνδέτης (Linker) Αντικείμενο πρόγραμμα (Object) Βιβλιοθήκη (Library) Εκτελέσιμο πρόγραμμα (Executable)

Πηγαίο πρόγραμμα

Πρόγραμμα γραμμένο σε μία γλώσσα προγραμματισμού υψηλού επιπέδου, όπως το παρακάτω παράδειγμα σε γλώσσα C:
                            
#include <stdio.h>

int main() {
    printf("Hello World!!\n");
    return 0;
} 
                            
                    

Μεταγλωττιστής (compiler)

Ο Μεταγλωττιστής (compiler) ελέγχει το πρόγραμμα για συντακτικά λάθη, και εμφανίζει κατάλληλα διαγνωστικά μηνύματα, εάν βρεθούν λάθη.
                    
#include <stdio.h>

int main() {
    printf("Hello World!!\n");
    return 0;
} 
                    
            
Αν δεν υπάρχουν λάθη μετατρέπεται το πρόγραμμα σε συμβολική γλώσσα (assembly).
                
    .file	"hello.c"
    .def	__main;	.scl	2;	.type	32;	.endef
    .section .rdata,"dr"
.LC0:
    .ascii "Hello World!!\0"
    .text
    .globl	main
    .def	main;	.scl	2;	.type	32;	.endef
    .seh_proc	main
main:
    pushq	%rbp
    .seh_pushreg	%rbp
    movq	%rsp, %rbp
    .seh_setframe	%rbp, 0
    subq	$32, %rsp
    .seh_stackalloc	32
    .seh_endprologue
    call	__main
    leaq	.LC0(%rip), %rcx
    call	puts
    movl	$0, %eax
    addq	$32, %rsp
    popq	%rbp
    ret
    .seh_endproc
    .ident	"GCC: (GNU) 4.8.3"
    .def	puts;	.scl	2;	.type	32;	.endef
                            
                    
            

Συμβολομεταφραστής (assembler)

Ένα πρόγραμμα γραμμένο σε συμβολική γλώσσα δεν μπορεί ακόμα να εκτελεστεί από τον υπολογιστή. Πρέπει να μετατραπεί σε γλώσσα μηχανής κατανοητή από τον υπολογιστή με ένα ειδικό πρόγραμμα που ονομάζεται συμβολομεταφραστής και το παραγόμενο αποτέλεσμα καλείται αντικείμενο πρόγραμμα (object code).
                    
    .file	"hello.c"
    .def	__main;	.scl	2;	.type	32;	.endef
    .section .rdata,"dr"
.LC0:
    .ascii "Hello World!!\0"
    .text
    .globl	main
    .def	main;	.scl	2;	.type	32;	.endef
    .seh_proc	main
main:
    pushq	%rbp
    .seh_pushreg	%rbp
    movq	%rsp, %rbp
    .seh_setframe	%rbp, 0
    subq	$32, %rsp
    .seh_stackalloc	32
    .seh_endprologue
    call	__main
    leaq	.LC0(%rip), %rcx
    call	puts
    movl	$0, %eax
    addq	$32, %rsp
    popq	%rbp
    ret
    .seh_endproc
    .ident	"GCC: (GNU) 4.8.3"
    .def	puts;	.scl	2;	.type	32;	.endef
                                
                        
                

Αντικείμενο πρόγραμμα (Object Code)

Το αντικείμενο πρόγραμμα περιέχει τον κώδικα του αρχικού μας προγράμματος μεταφρασμένο σε γλώσσα μηχανής του υπολογιστή. Ωστόσο δεν μπορεί ακόμα να εκτελεστεί, λόγω έλλειψης του κώδικα των εξωτερικών βιβλιοθηκών που χρησιμοποιούνται από το αρχικό μας πρόγραμμα.

Συνδέτης (Linker)

O Συνδέτης (Linker) συνδέει το αντικείμενο πρόγραμμα ή ένα σύνολο από αντικείμενα προγράμματα με έτοιμα υποπρογράμματα της βιβλιοθήκης της γλώσσας προγραμματισμού ή του προγραμματιστή. Το τελικό πρόγραμμα που παράγεται είναι το εκτελέσιμο πρόγραμμα ή κώδικας (executable code), είναι διατυπωμένο σε γλώσσα μηχανής και μπορεί να εκτελεστεί άμεσα από τον επεξεργαστή του υπολογιστή.