Problem s kompilerom jazyka C++

Programovacie jazyky, rady, poradňa...
apocalyptic
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 júl 2009, 16:08

Problem s kompilerom jazyka C++

Príspevok od používateľa apocalyptic »

Dobry den, takze mam problem ohlade kompilacie jedneho source napisaneho v C++ pomocu kompilatora gcc ...
System : GNU/LINUX Ubuntu

Source:

#include <iostream>

int main();
{
std::cout << "Nazdar Ludia!\n";
return 0
}

Ulozeny ako subor hehe.cpp

Ano, je to "amateur code" pretoze len zacinam...

do vstupu (terminalu) zadam gcc alebo g++ alebo gcc hehe.cpp -o program

Problem:
Kompiler oznamuje chybove hlasenie na stvrtom riadku...

Konkretne:
hehe.cpp:4: error: expected unqualified-id before ‘{’ token

No nejako mi to neda ale ze by nedokazal , resp. nepochopil znak '{’ ?

Dakujem za objasnenie tejto situacie , pripadne za pomoc poskytnutia vhodneho riesenia.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

za int main() nemá byť bodkočiarka
apocalyptic
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 júl 2009, 16:08

ddads

Príspevok od používateľa apocalyptic »

Dakujem, nechal som nasledne vytvorit subor hehe s koncovkou .obj ... "hehe.obj"

Lenze teraz mam jeden problem, neviem ako by to bolo treba previest linkerom kedze :

ld (cesta) hehe.obj

vypis:

ld: error in hehe.obj(.eh_frame); no .eh_frame_hdr table will be created.

Nejako som mimo , .eh_frame ??

Inak ako tak citam tak treba subor hehe.obj prepojit so vsetkymi potrebnymi kniznicamy , neman niekto sajn ako to urobit ?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

A prečo nepoužiješ to g++ hehe.cpp -o program čo si písal vyššie?

PS: Za return 0 chýba znak ;
apocalyptic
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 júl 2009, 16:08

re:

Príspevok od používateľa apocalyptic »

Ano , presne to som urbil lenze , cital som ze kompilaciou treba vytvorit subor tzv. obj , cize som to urobil takto : g++ hehe.cpp -o hehe.obj , cize mam vytvoreny subor "hehe.obj" a teraz nechapem ako z toho urobim spustitelny subor/program pomocou linkeru ...
piton
King
King
Používateľov profilový obrázok
Príspevky: 1902
Registrovaný: 02 aug 2005, 0:31
Bydlisko: Hnojisko

Príspevok od používateľa piton »

nie nie, gcc to nalinkuje sam, ked zadas gcc hehe.cpp -o program, tak sa vytvori binarka "program" v aktualnom adresari, a mozes to rovno spustit ./program
apocalyptic
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 júl 2009, 16:08

re:

Príspevok od používateľa apocalyptic »

dakujem pekne , konecne sa dostavam ku chapaniu situacie :) .... takze este par otazok , kedze "gcc hehe.cpp -o program , keby som zmenil hodnotu slova program napr na: "auto" tak by to vytvorilo binarku s nazvom auto ? Ak ano tak rozumiem , ale chcem sa opytat po kompilaci a prevedeni linkerom vystup :

/tmp/cc4s56fC.o: In function `main':
hehe.cpp:(.text+0x1c): undefined reference to `std::cout'
hehe.cpp:(.text+0x21): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/tmp/cc4s56fC.o: In function `__static_initialization_and_destruction_0(int, int)':
hehe.cpp:(.text+0x50): undefined reference to `std::ios_base::Init::Init()'
hehe.cpp:(.text+0x55): undefined reference to `std::ios_base::Init::~Init()'
/tmp/cc4s56fC.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status

cize toto je adresar kde sa nachadza binarka : /tmp/cc4s56fC ? a este jedna otazka : neviem ako to spustit... dakujem
piton
King
King
Používateľov profilový obrázok
Príspevky: 1902
Registrovaný: 02 aug 2005, 0:31
Bydlisko: Hnojisko

Príspevok od používateľa piton »

hmm, neviem preco to robi, kod je spravny, ale ked pouzijes g++ hehe.cpp -o program tak to funguje. A spustis to presne tak ako som napisal v predchadzajucom prispevku, cize ./program
apocalyptic
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 júl 2009, 16:08

re:

Príspevok od používateľa apocalyptic »

jo jo , vsetko ide diki moc , cize v tom kompilery je vlastne zabudovany aj linker ano ? diki moc
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Nie, nie je tam ani kompilátor a ani linker. Program gcc/g++ je v podstate len taký "mozog". Podľa parametrov a prípon sa rozhoduje čo konkrétne sa má robiť. V tom tvojom prípade teda najskôr zavolá preprocesor (program cpp) potom kompilátor (cc1/cc1plus), on vygeneruje assembler, ten sa potom spracuje ďalším programom (konkrétne programom as), ktorý vygeneruje objektové súbory a tie sa potom spoja linkerom (a teda programom ld). :) Teda ak by si veľmi chcel, môžeš gcc/g++ úplne ignorovať a mohol by si všetky tie kroky urobiť ručne.

gcc v tvojom prípade nefunguje kvôli tomu, že je to C++ kód a teda potrebuje nejaké veci navyše (konkrétne jednu knižnicu). So správnymi parametrami by sa dal použiť aj gcc, ale jednoduchšie je použiť priamo g++.
apocalyptic
Amateur
Amateur
Príspevky: 10
Registrovaný: 07 júl 2009, 16:08

re:

Príspevok od používateľa apocalyptic »

ej , bazmeg no to som fakt nevedel ale vdaka
ST1GD3R
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 250
Registrovaný: 20 apr 2009, 11:32
Bydlisko: Doma

Príspevok od používateľa ST1GD3R »

Mohol by som vedieť že z akej stránky? Alebo knihy alebo z čoho sa učíš keď si tam videl že za int main() je ; ??
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Pri deklarácii nejakej funkcie tam tá bodkočiarka má byť. ;)
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

ST1GD3R napísal:Mohol by som vedieť že z akej stránky? Alebo knihy alebo z čoho sa učíš keď si tam videl že za int main() je ; ??
Ináč ešte môžeš pozrieť www.programujte.cz tam je to celkom fajne pre začiatočníkov, knihu by som odporučil Mistrovství C++, ale to až vtedy ak toho už dačo budeš vedieť o programovaní a budeš sa tomu chieť viac venovať.
ST1GD3R
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 250
Registrovaný: 20 apr 2009, 11:32
Bydlisko: Doma

Príspevok od používateľa ST1GD3R »

chrono napísal:Pri deklarácii nejakej funkcie tam tá bodkočiarka má byť. ;)
No to je pravda. Ale za int main() pri prvom príklade..neviem možno to bola chyba manuálu tak preto sa pýtam. :>
Vertmich
Light Expert
Light Expert
Príspevky: 41
Registrovaný: 17 júl 2009, 16:38
Bydlisko: Co by si chcel vediet!?
Kontaktovať používateľa:

chyba

Príspevok od používateľa Vertmich »

ja neviem ja som taky nie velmi dobry c++ programator ale som sa na to pozrel a videl som ze tak nie je ciarka
neviem preco si dal niekde ciarku a niekde nie asi nepozornost
ale zao to by si mal ediet nie
ale nic sa nestalo :D
Napísať odpoveď