Ne, ne, ne, pogrešno si napisao. -o je opcija da daš naziv izvršnom fajlu. Ime ide direktno iza -o
gcc -o ime_izvrsnog izvorni_kod.c
ili
g++ -o ime_izvrsnog izvorni.cpp
(za C++, i inače su opcije identične)
Evo kako se sve otprilike dešava:
Tekst editor je običan program koji, jel da, menja tekstualne fajlove.
Kompajler je program koji kao ulaz dobija ispravne izvorne kodove, koji su obični tekstualni fajlovi, a kao izlaz ispisuje binarni izvršni kod.
Al nije tako jednostavno, kompajler ima više komponenti.
Kompajler u užem smislu je program koji od izvornog koda generiše asemblerski kod. Zatim na scenu stupa asembler koji prevodi taj kod u binarni koji sadrži sve instrukcije, ali ne zna tačno adrese svih spoljašnjih funkcija. Umesto toga ima obeleženo gde koja funkcija treba da se pozove, a linker to posle tumači i pronalazi te funkcije, sastavlja konačan izvršni fajl i upisuje adrese unutrašnjih i spoljašnjih funkcija.
Možeš prekinuti proces u svakom koraku, što će ti jednog dana možda biti korisno
)
g++ -S program.cpp - daje ti asemblerski kod
g++ -c program.cpp - daje ti objektni kod bez linkovanja
Stvarno nije ništa komplikovano raditi na taj način, a shvatićeš više.