Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Dev-C++ ja linkitys

Sivun loppuun

Hara Kiri [12.10.2006 12:44:40]

#

Olen yrittänyt lisätä projektiini .o päätteisiä objektitiedostoja Project Options->Parameters kautta, jolloin ne tulevat linkitykseen tarvittavien SDL:n kirjastojen maininnan jälkeen muotoon: luokka.o. Mutta tällöin luokka.o ei tule mukaan, kun käännän projektin. Jos lisään tiedoston näin: -luokka.o, se tulee mukaan, mutta nyt vuorostaan SDL katoaa.

Teenkö jotain väärin vai mikä voisi aiheuttaa tämän?

A-P [12.10.2006 12:55:14]

#

Komentoriviltä se menisi, mikäli ymmärsin oikein mitä tässä haettiin, näin

>
> gcc -o MunOhjelma -lsdl tiedosto1.c tiedosto2.c tiedosto3.o tiedosto4.o

Eli valmiiksi käännetyt tiedostot voidaan lisätä käännöskomentoon samalla tavalla kuin kääntämättömät lähdekooditiedostot.

Hara Kiri [12.10.2006 13:22:59]

#

Mitenköhän tuon voisi tehdä Dev-C++:ssa. Mutta kiitos avusta; pitää varmaan opetella kääntämään komentorivin kautta.

A-P [12.10.2006 14:01:03]

#

Valitettavasti en tunne kyseistä tuotetta muuten kuin, että sen kääntäjä on windows-versio gcc:stä. Mikäli aiot ohjelmoida C:llä tai C++:llä (miksei muullakin) enemmänkin, niin suosittelen tutustumaan makeen ja tekotiedostoihin (Makefile).

Esimerkki hyvin yksinkertaisesta tekotiedostosta (Makefile):

ohjelma: ohjelma.o
<tab>gcc -o ohjelma ohjelma.o

ohjelma.o: ohjelma.c
<tab>gcc -c ohjelma.c

Kääntäminen suoritetaan komennolla make. Kun sille ei anneta tiedostoa se etsii Makefile-tiedoston ja lukee sieltä ensimmäisen säännön eli ohjelma. Tämän jälkeen huomataan, että ohjelma riippuu tiedostosta ohjelma.o, jota vastaa sääntö ohjelma.o. Jos tiedostoa ohjelma.o ei vielä ole tai se on vanhentunut siirrytään sääntöön ohjelma.o jne.

Sääntö muodostuu kolmesta osasta: kohde, riippuvuus ja komennot.

Lisää makesta osoitteissa http://linux.fi/index.php/Makefile ja http://www.ling.helsinki.fi/~mkoljone/unix2/make/.

Hara Kiri [12.10.2006 14:21:05]

#

Kiitos avusta, täytyy perehtyä komentoriviltä kääntämiseen ja tekotiedostoihin.

Metabolix [12.10.2006 15:40:19]

#

Kääntäjien ja linkkerin parametrit löytyvät projektin asetuksista: Project -> Project Options -> Parameters.

Hara Kiri [12.10.2006 16:29:09]

#

Metabolix kirjoitti:

Kääntäjien ja linkkerin parametrit löytyvät projektin asetuksista: Project -> Project Options -> Parameters.

Ongelmana on, että en luultavasti osaa käyttää tuota kunnolla.

Metabolix [12.10.2006 17:05:07]

#

-lkirjasto eli vaikkapa SDL, OpenGL ja palikka.o näin:

-lSDL
-lSDLmain
-lopengl32
palikka.o

Hara Kiri [12.10.2006 17:13:11]

#

Kun teen noin, SDL ei tule mukaan. Jos SDL:n linkitys onnistuu, ei palikka tule mukaan.

Metabolix [12.10.2006 17:15:50]

#

Perin merkillistä. Voit toki kokeilla laittaa nuo samalle riville. Jos sekään ei auta, ei voi muuta sanoa kuin että päivitäpä päivitystyökalulla kääntäjäpaketti eli mingw32 ynnä muut sellaiset. Minulla tuo ei ainakaan ole aiheuttanut mitään ongelmia. Oletko aivan varma, että ongelma on juuri linkityksessä? Millainen virheilmoitus tulee?

Hara Kiri [12.10.2006 18:01:14]

#

En voi ladata päivityksiä, koska WebUpdate ei saa yhteyttä servereihin.

Jokaisesta projektin käyttämästä SDL:n funktiosta tulee virheilmoitus, esim: [Linker error] undefined reference to `SDL_RWFromFile' jne.
Parametreistä löytyy seuraava:

-lmingw32 -lSDLmain -lSDL
palikka1.o
palikka2.o

Kaikki toimii jos käytän tarvittavia .cpp tiedostoja ja lisään ne Project->Add to Project kautta, mutta .o tiedostoja en saa mukaan ja niiden kanssa kääntäminen ei onnistu.

Dev-C++:ssa on alkanut olemaan muitakin ongelmia, joten kannattaa varmaan asentaa se uudestaan.

Tzaeru [12.10.2006 19:34:52]

#

No se vakioserveri mihin se yhdistää ei ole toiminut viimeiseen ~puoleen vuoteen, joten vaihappa se. Sen voi helposti vaihella siitä palkista samassa ikkunassa.. :)

Hara Kiri [12.10.2006 20:22:36]

#

Tzaeru kirjoitti:

No se vakioserveri mihin se yhdistää ei ole toiminut viimeiseen ~puoleen vuoteen, joten vaihappa se. Sen voi helposti vaihella siitä palkista samassa ikkunassa.. :)

Kiitos, olisihan tuo pitänyt muistaa :), mutta en sieltä toiseltakaan saa kaikkia uusimpia päivityksiä.

Mitenköhän SDL:n saisi linkitettyä, kun kääntää Dev-C++:n mukana tulleella mingw:llä komentorivin kautta? Putkan oppaissa kerrotut ohjeet tai Dev-C++:n projektin parametrien kopioiminen ei auta.

Tzaeru [12.10.2006 21:18:33]

#

Hyvä käytäntö on aloittaa valmis SDL projekti. Eli kun aloitat projektin, otat mallikkeeksi SDL jolloin tulee automaattisesti linkitykset yms mukaan..

Hara Kiri [13.10.2006 10:22:37]

#

Tzaeru kirjoitti:

Hyvä käytäntö on aloittaa valmis SDL projekti. Eli kun aloitat projektin, otat mallikkeeksi SDL jolloin tulee automaattisesti linkitykset yms mukaan..

Noin olen yleensä tehnytkin, mutta kun lisään jonkin oman objektin linkitykseen se ei enää toimi.

Metabolix [13.10.2006 16:16:38]

#

Tavallinen C++-ohjelman kääntökomento:
g++ paaohjelma.cpp muu_funktio.cpp -o tosi_siisti_juttu.exe -lmingw32 -lSDLmain -lSDL
Hyödyllisiä lisävalitsimia:
-g ottaa käyttöön debug-tiedot, jolloin vikoja voi lähteä etsimään debuggerin eli vaikkapa gdb:n avulla.
-Wall käskee kääntäjän näyttää kaikki varoituksetkin, jolloin potentiaalisia virheitä on vielä helpompi löytää.
-O2 on toisen tason optimointilippu, yleensä järkevä vaihtoehto optimoinniksi viimeistäänkin julkaisuvaiheessa.
-s pienentää ohjelman kokoa poistamalla turhaa tavaraa (strip-ohjelman avulla), tämä kannattaa tehdä levitettäville versioille, niin ovat pienempiä ladattavia.

Hara Kiri [13.10.2006 16:38:23]

#

Kiitos avusta, tuolla tavalla se toimii. Olin varmaan kirjoittanut jotain väärin. Tosin nyt kaikki tiedostot olivat C:\ -asemalla, kun ne ennen olivat F:\.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta