Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Build Error (Dev-C++)

Sivun loppuun

ByteMan [04.11.2007 14:21:20]

#

elikäs olen SDL:ää opettelemassa tuon Heikin SDL-opasta käytellen.
sain lopulta linkitettyä tarvittavat tiedostot ja kaikkea, mutta kääntäjältä tulees ilti virheilmoitus:

[Build Error] [ohjelma.exe] Error 1

ja tämä koskee tiedostoa Makefile.win

tää saattaa kuulostaa hieman uusavuttomalta, mutta osaisko joku kertoa mikä tos on vikana?
koodi on sama kuin Heikin oppaan se eka koodi

Kray [04.11.2007 14:27:38]

#

Hmm... Mites asensit, käsipelillä vai Dev-c++:ssan oman paketinasentajan avulla? Ja jos teit paketinasentajalla, valitsitko projektin pohjaksi SDL-sovelluksen sieltä multimedia-välilehden alta?

ByteMan [04.11.2007 14:53:49]

#

tein pakettiasentajalla ja en valinnut projektin pohjaa(koska ne virheet oli vielä hämärämpiä), vaan valitsin tyhjän projektin ja kopion ne asetukset sinne.
nii ja mainittakoot vielä, että dev-c++:n helppi ei jostain syystä toimi vistassa, nii en ole sieltä voinut katsoa mistä ongelma voisi johtua

Kray [04.11.2007 15:31:14]

#

Ai käytät vistaa 8o? No ei ihme jos ei toimi, tuntuu vähän siltä, että dev-c++:ssan käyttämästä kääntäjästä ei ole olemassa Vista-versiota, jonka takia se ei toimi kunnolla. Vistan tuki XP:n ohjelmille kun on surkea...

ByteMan [04.11.2007 15:34:34]

#

no eiks sen kääntäjän voi vaihtaa sielt jostain asetuksesta?
et mikä olis sit joku ilmanen vistayhteensopiva kääntäjä?

Kray [04.11.2007 15:35:45]

#

Kyllä pitäisi pystyä vaihtamaan, mutta alas nyt sitten metsästämään vista- ja Dev-cpp sopivaa ilmaista kääntäjää niin huhhuh.

ByteMan [04.11.2007 15:39:13]

#

no jos sit vaihtaa kokonaan ohjelmaa..?
mikä olis joku kohtuu hyvä vistayhteensopiva kääntäjä, tai mikä tahansa dev-c++ vastaava ohjelma? nii ja ilmanen..

Resiina [04.11.2007 16:03:45]

#

Kyllä minulla ainakin toimii Dev-C++ Vistalla.

Markus [04.11.2007 16:48:26]

#

Vika EI ole kääntäjässä (joka Dev-Cpp:n tapauksessa on MinGW (joka taas puolestaan on GCC:n Windows versio)).

Oletko varma, että et saa muuta virheilmoitusta kuin tuon "[Build Error] [ohjelma.exe] Error 1"? Sen perusteella on vähän hankala sanoa mikä on vialla.

Mihin kohtaan käännöstä prosessi jämähtää? Tiedostojen kääntämiseen objektikoodiksi vai kenties linkitykseen?

Mitä tapahtuu, jos ajat maken suoraan komentoriviltä?

ByteMan [04.11.2007 23:23:38]

#

juu eli nyt oon kokeillu kaikkee mitä keksin(myös komentorivil vaikka en mä oikeen mitään osaa komentorivillä tehä.. hei joku voiski tehä oppaan siitä, miten .cpp kooditiedosto käännetään, linkitetään ja kasataan(tehään se mikä .exe) komentorivillä >.<)
ja olen saanut virheet rajattua seuraaviin:

In funktion 'console main': [Linker Eroor] undefined reference to 'SDL_SetModuleHandle'

tiedostossa:
Dev-Cpp\libSDLmain.a(SDL_win32_main.o)(.text+0x3ab)

ja

[Build Error] exe: *** [ohjelma.exe] Error 1

tiedostossa:
Dev-Cpp\projektit\Makefile.win

ymmärtääkseni kääntäminen keskeytyy mingw32-make.exe:n käynnistyessä tai jotain sinnepäin

juu olisi ihan kiva jos joku keksisi mikä tuossa mättää, yritän kuitenkin ensitilassa päästä tutustumaan dev-cpp:n ohjetiedostoon(mikä siis ei toimi vistalla)jos siellä kerrottaisiin mikä on build error 1..

edit:
siit komentorivist viel, et yritin ajaa sitä make.exe:ä lauseella:

make.exe -o main.o Makefile.win -lSDL -lSDLmain

tämä yritykseni leikkiä komentorivillä yllätykseni tuottikin seuraavan lauseen eikä jotain file doesn't existiä:

make.exe: Nothing to be done for 'Makefile.win'

Markus [05.11.2007 11:28:09]

#

"make" ei ole kääntäjä vaan tulkki, joka suorittaa tiedostossa "Makefile" olevia komentoja. "Makefile" siis sisältää itse kääntämiseen tarkoitetut komennot. Sen on siis saman tapainen, kuin Windowssin "bat"-tiedostot tai Linuxin "sh"-tiedostot. Itse kääntäjän nimi on gcc (tai C++:n tapauksessa g++).

Jos lähdekoodisi on yhdessä tiedostossa "ohjelma.cpp", voi sen kääntää sen yhdellä komennolla:
"g++ ohjelma.cpp -o ohjelma.exe -lmingw32 -lSDLmain -lSDL"

edit.
Jos tiedostoja on useampi, pitää ne kääntää kaikki omalla komennollaan ja sitten vielä linkittää yhteen. Jotta kaikkia näitä komentoja ei tarvitsisi kirjoittaa aina uudestaan kääntämisen yhteydessä, kannattaa ne kirjoittaa komentosarjaksi tiedostoon, jonka sisältö ajetaan kerralla. Tälläisia komentosarjatiedostoja ovat mm. "bat" (Window) ja "sh" (Linux).

"bat" ja "sh" tiedostoissa on kuitenkin se vika, että ne ovat käyttöjärjestelmäriippuvaisia. Niimpä pyritään käyttämään käyttöjärjestelmä riippumatonta (ja oikein laadittuna kääntäjäriippumatonta) "Makefile"-formaattia.

Juuri tällaisen "Makefile":n Dev-Cpp (ja muutkin IDE:t kuten Eclipse) sinulle generoi valmiiksi. Sinulla on nyt vain projektisi asetuksissa jokin vika, kun tiedosto generoituu väärin. (Ilmeisesti tiedosto "mingw32" puuttuu linkkerin asetuksissa.)

TsaTsaTsaa [05.11.2007 15:35:35]

#

Markus kirjoitti:

Jos lähdekoodisi on yhdessä tiedostossa "ohjelma.cpp", voi sen kääntää sen yhdellä komennolla:
"g++ ohjelma.cpp -o ohjelma.exe -lmingw32 -lSDLmain -lSDL"

edit.
Jos tiedostoja on useampi, pitää ne kääntää kaikki omalla komennollaan ja sitten vielä linkittää yhteen.

No mutta eikös ne saa yhdellä komennolla "g++ eka.cpp toka.cpp kolmas.cpp -o ohjelma.exe" ja jollakin muulla vivulla kuin -o:lla (olisikohan ollut -c, en muista) tehdään objektitiedostot jotka pitää sitten vielä erikseen linkittää. Tyyliin:

g++ -c eka.cpp // syntyy eka.o
g++ -c toka.cpp // syntyy toka.o
g++ eka.o toka.o -o ohjelma.exe

ByteMan [05.11.2007 17:50:24]

#

nonii, elikäs yritin nyt lauseilla

g++ main.cpp -o main.exe -lmingw32 -lSDLmain -lSDL

ja

g++ -c main.cpp

ja sain molemmista saman virheilmoituksen:

g++: installation problem, cannot exec 'cc1plus': No such file or directory

kuten taisin jo sanoo en itte oo kauheesti komentorivil tehny, nii toivottavasti joku ymmärtää mitä tuo meinaa. jos se vaikka täsmentäs ongelmaa tai jotain..

Markus [05.11.2007 18:06:14]

#

Kääntäjäsi asennus on ilmeisesti vajavainen.

Tarkista, että kansio, josta "g++.exe" löytyy (varmaan "c:/jotain/dev.cpp/bin") on polussa. Eli etsi jostain käyttöjärjestelmäsi asetuksista ympäristömuuttuja nimeltä "PATH" ja lisää kansio, josta kääntäjäsi löytyy, siihen muiden kansioiden joukkoon.

Löysin Googlella seuraavat ohjeet kyseisen toimenpiteen tekemiseksi:
"
1. Click Start and choose Control Panel
2. Click System, on the right you’ll see “View basic information about your computerö
3. On the left is a list of tasks, the last of which is “Advanced system settings.ö Click that.
4. The Advanced tab of the System Properties dialog box is shown. Click the Environment Variables button on the bottom right.
5. In the lower box titled “System Variablesö scroll down to Path and click the Edit button.
6. Change your path as need be.
7. Restart your system. Vista didn’t pick up the system path environment variable change until I restarted.
"

Jos mikään muu ei auta, lataa ja asenna kääntäjä uudestaan suoraan sen kotisivulta: http://www.mingw.org/

EDIT:
Kokeilitko lisätä sen "-lmingw32" lipun Dev-cpp:n projektin asetuksiin linker-kohtaan?

Metabolix [05.11.2007 18:10:44]

#

Markus kirjoitti:

Tälläisia komentosarjatiedostoja ovat mm. "bat" (Window) ja "sh" (Linux).

"bat" ja "sh" tiedostoissa on kuitenkin se vika, että ne ovat käyttöjärjestelmäriippuvaisia. Niimpä pyritään käyttämään käyttöjärjestelmä riippumatonta (ja oikein laadittuna kääntäjäriippumatonta) "Makefile"-formaattia.

Muutama korjaus tähän. Linuxissa tiedoston pääte on irrelevantti, useammin näkee jopa päätteettömiä kuin sh-päätteisiä skriptejä. Nämä eivät myöskään ole sen käyttöjärjestelmäriippuvaisempia kuin Makefiletkään. Makefilen käsittelyyn tarvitaan sopiva make-ohjelma, skripteihin niitä vastaavat tulkit, enkä näe mitään syytä, miksi make olisi vähemmän riippuvainen järjestelmästä.

Jos GNU makelle haluaa antaa parametriksi tietyn Makefilen, täytyy käyttää -f-lippua. Muuten oletuksena on yleensä ainakin Linuxissa Makefile ilman päätettä. Muut kääntöohjeet täällä onkin jo hyvin annettu. Tuota viimeistä varten kehottaisin ensiksi koko systeemin (MinGW tai Dev-C++) poistamista ja uudelleenasennusta, kun se ei kuitenkaan kovin suuri vaiva ole. Sitten vasta lähtisin tutkimaan tarkemmin. Jossain asetustiedostossa voi olla jokin polku väärin.

ByteMan [05.11.2007 22:38:17]

#

mahtavaa, nyt siis asensin dev-cpp:n uudestaan, ja kas kummaa, nyt virheitä on kahden sijasta yksi :D
ja se on:

[Build Error] [main.o] Error 1

ja Makefile.win taas bugaa..

edit: tai siis vieläkin..
edit2: ainii Markus, kävin laittaa sen polun sinne PATH-muuttujaan, mut ei siit mitää tapahtunu :(
edit3: löysin lopulta sen cc1pplus tiedoston(.exe jos tarkkoi ollaan) ja kopioin sen samaan kansioon main.cpp:n kannsa, mutta eipä siitä mitään hyötyä ollut, komentorivillä virhe vaihtui, ja IDE:llä virhe vaihtui, ja tuli uusi sen seuraks..
komentorivi valittaa että:

undefined reference to 'SDL_SetModuleHandle'

Markus [06.11.2007 15:19:37]

#

Otetaampa rauhassa ihan alusta.

1. Älä kopioi mitään ohjelmatiedostoja koskaan mihinkään! Jätä kaikki kääntäjäsi tiedostot siihen kansioon, johon asennusohjelma ne asensi. Tiedostojen siirtely/kopiointi on varma tapa sotkea kääntäjä.

2. Testaa toimiiko kääntäjäsi oikein. Kirjoita seuraava yksinkertainen esimerkkiohjelma tiedostoon "testi.cpp" ja tallenna se tyhjään kansioon.

#include <iostream>

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

Mene sitten komentorivillä kyseiseen kansioon ja kirjoita "g++ testi.cpp -o testi.exe".

Kääntyykö ohjelma? Jos kyllä, kääntäsi toimii oikein. Jos ei, kääntäjäsi hakemisto ei ole polussa. Aseta kääntäjän hakemisto polkuun ja käynnistä tietokone uudestaan.

3. Onhan SDL asennettu? Jos ei, imuroi SDL osoitteesta "http://www.libsdl.org/release/SDL-devel-1.2.12-mingw32.tar.gz". Pura paketin "include"-hakemiston sisältö kääntäjäsi "include"-hakemistoon ja paketin "lib"-hakemiston sisältö kääntäsi "lib"-hakemistoon. Muilla tiedostoilla ei niin väliä. Pura lisäksi SDL.dll Windowsin "system32" hakemistoon (hakemiston nimi voi olla eri Vistassa tai 64 bittisellä Windowsilla). (jos tarvitset ohjelman pakettien purkamiseen, niin 7-zip on hyvä: "http://www.7-zip.org/")

4. Linkitäthän varmasti tiedostojen "libmingw32.a", "libSDLmain.a" ja "libSDL.a" kanssa? Komentoriviltä kääntäessä tämä tarkoittaa lippujen "-lmingw32 -lSDLmain -lSDL" antamista. Dev-cpp:n tapauksessa etsi projektin asetuksista kohta "linker" ja lisää samat liput sinne.

ByteMan [06.11.2007 20:43:58]

#

noniin..

KIITOS KAIKILLE AUTTANEILLE!!! :D :D :D

Koodi kääntyi komentorivillä ja lippujen järjestyksen korjaamisen jälkeen myös idellä(.....)

Vielä kerran kiitos apunsa tarjonneille :D


Sivun alkuun

Vastaus

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

Tietoa sivustosta