Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kompajliranje i linkovanje u linuxu

[es] :: C/C++ programiranje :: Kompajliranje i linkovanje u linuxu

[ Pregleda: 2167 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

karachi

Član broj: 11251
Poruke: 8
*.europronet.ba



Profil

icon Kompajliranje i linkovanje u linuxu11.11.2003. u 09:07 - pre 251 meseci
Pozdravljam sve. Prije par dana sam po prvi put instalirao linux (Mandrake 9.1, ako nekom nešto znači). Prvo što sam htio da vidim je kako na njemu funkcionišu PERL, PHP i C++. Nakon umjerenih napora, na svoje veliko zadovoljstvo uspio sam pronaći home direktorij apache web servera, te na njega postavio php stranicu, koja je radila savršeno. Nakon toga isprobao sam i perl, da ne dužim, radi ko kod kuće, što bi se reklo. Onda sam odlučio da isprobam C++.

Složio sam neki kliše rudimentarni programčić iz «hello world» klase, spasio ga na desktop sa .cpp ekstenzijom, te pokušao da ga kompiliram iz komandne linije (ili kako se to već zove u linuxu, konzola?) naredbom: gcc test.cpp, i... tu nastaju muke Tantalove! (Sad bi najviše volio da mi neko kaže: «Glupane, nije ti to ta komanda» i da je to ustvari rješenje problema.) Kompajler me je zauzvrat počastio gomilom smeća. Jedino što sam razumio bilo je da mi na kraju fajla fali newline (!?šta je sad to!?), kao i da čini se ima nekih problema sa uključivanjem iostream.h, jer malo-malo pa kaže da mu nešto ne valja sa funkcijama cin i cout. Ostalo je bila gomila memorijskih adresa. Šta god činio, desi se ovo isto. Nakon određenog broja sati provedenih u jalovim pokušajima da kompiliram «hello world» program, shvatio sam koliko glupo sam sebi izgledam, i odlučio sam se za radikalan potez – KDevelop (razvojno okruženje).

KDevelop, između ostalog, neće ništa da kompilira što nije u okviru njegovog projekta (ako griješim, neka me neko slobodno ispravi, za ljubav znanja trpim čak i umjerenu količinu sarkazma), pa sam mu zadao da prvo napravi taj projekat. KDevelop je sam generisao zavidnu količinu fajlova, uključujući i razne shell skripte (koje nemam pojma čemu služe), install fajl, pa čak i bjanko readme fajl, te zadnje, ali ne i najmanje važno, main.cpp (u koji valjda treba da ide moj program), a čiji je sadržaj, gle čuda, valjda u edukativne svrhe, «hello world» program glavom. «Odlično» pomislih, i bez razmišljanja zadah naredbu Compile. Ovaj put čini se kompajliranje je uspješno izvršeno, to sam shvatio dijelom jer se nakon određenog vremena u folderu projekta pojavio objektni fajl, a dijelom jer je u message prozoru pisalo «success». Na red je došlo linkovanje (odnosno Make, jesam li u pravu?).

Da ne dužim, jer ovo stvarno ode u nedogled, krene on sa linkovanjem (to je taj Make, je li?), a u message prozoru se ispisuju razne poruke. Zabavno je to bilo prvih 5-10 minuta, ko je nekad pokušao i gledao «Zvjezdane staze» posvjedočiće da se slično događa u Datinoj konzoli kad mu je stvarno frka, međutim, nakon određenog vremena, primijetio sam da se poruke ponavljaju u nedogled, kao da je Make ušao u neku beskonačnu petlju i vrti, vrti, vrti i vrti i ne prestaje, a ja mu ništa ne mogu osim prekinuti ga, da bih dobio poruku o bezuspješnom Make-u. Isto je događa kad otkucam make Install u komandnoj liniji.

Dakle, nisam uspio kompilirati najjednostavniji program iz komandne linije, a kada sam to pokušao uz pomoć KDevelop-a, nisam ga uspio linkovati. Ima li iko pojma o čemu pričam, i ima li ideju gdje griješim? Hvala unaprijed.
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Kompajliranje i linkovanje u linuxu11.11.2003. u 09:46 - pre 251 meseci
Citat:
karachi:
linuxu, konzola?) naredbom: gcc test.cpp, i... tu nastaju muke Tantalove! (Sad bi najviše

Ovaj, nije ti to ta komanda :) ... C++ programi se prevode sa g++. To je bitno, kao što je još bitno znati da su mnogi primeri dostupni na Internetu pisani u zastarelim „dijalektima“ jezika C++ i da se ponekad ti zastareli dijalekti ne mogu prevesti bez grešaka na modernim prevodiocima, a GNU C++ je razumno moderan prevodilac.

Citat:

kraju fajla fali newline (!?šta je sad to!?), kao i da čini se ima nekih problema sa

Fali ti još jedan pritisak na Enter posle poslednjeg reda u datoteci sa kodom. To je verujem samo upozorenje, a postoji zato što neki drugi prevodioci mogu imati problema kada ne postoji novi red na kraju fajla.

Citat:

prozoru pisalo «success». Na red je došlo linkovanje (odnosno Make, jesam li u pravu?).


Ciklus obično ide ovako: pisanje programa, prevođenje, linkovanje, (ispravljanje grešaka ako ih ima) pokretanje. Program make automatizuje ovaj proces. Na žalost, C i C++ tradicionalno nemaju ovu automatizaciju ugrađenu u sam jezik pa make služi kao priručni alat.

Praktična filozofija kaže da ti make nije potreban dok sam ne shvatiš da ti treba (a pošto ne znaš šta Make radi, onda se to shvatanje svodi na nešto što počinje sa: „Eh, kada bih imao program koji bi automatski...“). Drugim rečima ostavi to za kasnije.

Citat:

pokušao uz pomoć KDevelop-a, nisam ga uspio linkovati. Ima li iko pojma o čemu pričam, i ima li ideju gdje griješim? Hvala unaprijed.


Primer govori više od hiljadu reči.

Code:

#include <iostream>

using namespace std;

int main(void)
{
  cout << "Hello world" << endl;
  return 0;
}



Code:

$ g++ -o mojaproba mojaproba.cpp 
$ ./mojaproba


f
 
Odgovor na temu

karachi

Član broj: 11251
Poruke: 8
*.europronet.ba



Profil

icon Re: Kompajliranje i linkovanje u linuxu11.11.2003. u 10:00 - pre 251 meseci
Duhovito, iscrpno, temeljito, ali što je najbitnije - poučno Zahvaljujem, čini se da je problem zaista bio u komandi, jer sam dobio hint i iz drugog izvora. Kako bilo, probaću kad dođem kući. Međutim,

1. Koliko sam te shvatio g++ bi trebao da odradi sav posao sve do .exe fajla? (samo reci True or False)

2. Šta je sa KDevelopom? Kažem ti, uredno napravi objektni fajl, ali od .exe-a ni traga, a kada mu zadam make (priznajem, kako si i sam naslutio da mi taj programčić nije do kraja jasan, mislio sam da je to samo neki linker), vrti i vrti, samo u krug bez kraja i početka...

Hvala još jednom na strpljenju
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Kompajliranje i linkovanje u linuxu11.11.2003. u 10:10 - pre 251 meseci
True.

KDevelop je veliki čekić. Namena mu je da olakša pisanje velikih programa — koji se potencijalno sastoje od mnogo modula različitih tipova i složenosti — a ne da pomaže pri pisanju Hello world. Zato bih preporučio početnicima da se klone KDevelopa, kao uostalom i bilo kog drugog sličnog okruženja. (Znam da će se naći ljudi koji se s time neće složiti, tako da samo da napomenem da je ova tvrdnja data uz nekoliko jakih pretpostavki o korisniku okruženja, njegovom znanju i potrebama.)

Detalje će morati da objasni neko ko dobro poznaje KDevelop.

f
 
Odgovor na temu

karachi

Član broj: 11251
Poruke: 8
*.europronet.ba



Profil

icon Re: Kompajliranje i linkovanje u linuxu11.11.2003. u 10:20 - pre 251 meseci
Hahahaha, pa dobro sad, priznajem da nisam neki guru, ali odmakao sam od hello worlda, slobodno upotrebljavajte višesložne riječi. Kako sam već spomenuo, hello world sam kompajlirao čisto da vidim kako to sve hoda pod linuxom (e, s linuxom sam na hello world). Svejedno, hvala još jednom.
 
Odgovor na temu

filmil
Filip Miletić
Oce Technologies B.V., inženjer
hardvera
Arcen, NL

Član broj: 243
Poruke: 2114
*.et.tudelft.nl

Jabber: filmil@jabber.org
ICQ: 36601391


+3 Profil

icon Re: Kompajliranje i linkovanje u linuxu11.11.2003. u 10:28 - pre 251 meseci
Zato sam i rekao da se možda neki neće složiti, a jedan od tih možda nekih si upravo ispao ti... :)
 
Odgovor na temu

[es] :: C/C++ programiranje :: Kompajliranje i linkovanje u linuxu

[ Pregleda: 2167 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.