Ei kai se SDL:llä ohjelmointi voi olla niin vaikeaa. Oon tehny jo kaikki jutut linkkeri tarkistettu ja projekti luullakseni aloitettu. Mutta ei sen kääntäjän pidä enää valittaaa tätä samaa:
undefined reference to `SDL_Init',
undefined reference to `SDL_GetError' ,
undefined reference to `SDL_SetVideoMode' ,
undefined reference to `SDL_Delay'
undefined reference to `SDL_Quit' ,
undefined reference to `WinMain@16'
ld returned 1 exit status
Kertokaa nyt hyvänen aika, mikä hitto on vikana ja samalla tarkat ohjeet siihen projektin aloitukseen (Samalla sen ekan SDL-oppaan koodi siinä)? Kiitos!
SDL ei välttämättä ole vian aiheuttaja, joten mikähän kieli mahtaa olla kyseessä?
Nuo ovat linkkerin virheilmoituksia. Sinulla on kyllä #include <SDL/SDL.h> jossa kerrot kääntäjälle että esimerkiski funktio SDL_Init tulee joskus. Mutta sen toteutus puuttuu, ja linkkeri ei voi tehdä ajettavaa ohjelmaa.
Katso SDL:n asennusoppaasta opasalueelta miten linkkeriasetukset annetaan.
Edit. Olet näemmä jo katsonut linkkerijutut. No, katso vielä kerran että olet tehny kaiken kuten oppaassa neuvotaan...
C++ ja Dev-CPP, mutta juuri äsken taisin saada nuo muut virheet pois, mutta jäi vielä tämä 1d returned 1 exit status virheeksi, joten mikä vika vielä?
Tuo returned 1 exit status kertoo että tapahtui virhe käännöksessä/linkityksessä, ei muuta eli paha sanoa mikä on ongelma. Muuta nyt ainakin WinMain-funktiosi tavalliseksi main-funktioksi.
Siinä koodi joka on tallennettuna SDL1.dev tiedostona:
#include <SDL/SDL.h> int main(int argc, char *argv[]) { if( SDL_Init(SDL_INIT_VIDEO) < 0 ) { fprintf(stderr, "SDL:n alustus ei onnistunut: %s\n", SDL_GetError()); return 0; } SDL_Surface * naytto; naytto = SDL_SetVideoMode(1024, 768, 32, SDL_HWSURFACE|SDL_FULLSCREEN); SDL_Delay(5000); SDL_Quit(); return 0; }
Tuo koodi kääntyy minulla täysin ilman virheitä (linkkerille -lsdl). Eli koodissa ei ole vikaa. Mitä kaikkia virheilmiotuksia kääntäjä (linkkeri) antaa?
No mikä meni väärin avaan Dev-Cpp:n. Vasemmasta ylä kulmasta klikkaan hiirellä painiketta "File" sieltä toi "New" ja sieltä klikkaan "Project...". Klikkattuani tätä "Project..." syntyy näytölle ruutu nimelrä "New Project" ja tämän ruudun yläkulmassa on välilehtiä nimeltään Basic, Introduvtion ja MultiMedia. Sit klikkaan hiirellä tuota MultiMedia välilehteä ja siinä ruudulla näkyy sen jälkeen OpenGL logo ja SDL logo. Klikkaan SDL logoa ja alla lukee Description: Create a multi media application or game with SDL ja sen alla on lukee:
Name:Project1
C++ Project
OK
Painan OK näppäintä ja näytölle ilmestyy ruutu jossa Tiedosto Project1 pitää tallentaa johonkin tiedostoon ja minä tallennan sen tähän tiedostoon "C:/Dev-CPP".Nyt ikkuna katoaa ja tiedostoon "C:/Dev-CPP" syntyy SDL logo nimeltä Project1 ja Dev-Cpp ikkunaan tulee tekstiä. Sen tekstin nimi on "main.cpp". Nyt klikkaan hiirellä Dev-Cpp ohjelman yläkulmasta "Project" juttua ja sieltä "Project Options". Näin syntyy ikkuna nimeltä Project Options sieltä klikkaan ylhäältä välilehteä "Parameters". Tässä Parameters ruudussa on kolme pientä aukeamaa ja oikella olevan aukeaman nimi on "Linker". Tässä Linker aukeamassa lukee tämä pitkään puhuttu
-lmingw32 -lSDLmain -lSDL -liberty
Ja nyt painan vaan OK ja ruutu "Project Options" katoaa näytöltä. Palaamme jälleen Dev-Cpp ohjelman pää ruutuun jossa on tää teksti nimeltä "main.cpp". Pyyhin tuon tekstin ja laitan tämän edellisessä vietissäni mainitun koodin siihen. Painan ohjelman vasemmasta yläkulmasta File>> Save ja tallennan tiedoston main.cpp ja yritän kääntää sitä mut ei onnistu ja sit yritän kääntää sitä main.dev tiedostona ja ei edelleenkään onnistu. Mikä meni väärin, kertokaa ite miten teette Dev-CPP:llä uuden projektin johon tallennatte tuon koodin?
JA MINKÄLAISEN OHJELMAN TUO koodi TEKEE KUN SE TOIMII?
Minulla oli ongelmana myös kun harjoittelin sdl:lää että en millään saanut omaa koodiani/kuvaa näkymään. Loin myös tuon uuden projektin ja se teki siihen itse jotain omituista joka sitten käännettynä ja suorittaessa vaihteli värejä. En oikein käsitä mitä teet tuolla project optionsilla, mutta en mikään asiantuntija olekaan. Sain kuitenkin oman kuvani näkymään kun pyyhin ne ylimääräiset pois ja sijoitin sen koodini sen entisen tilalle. Homma ei kuitenkaan ollut vielä sillä kuitattu vaan piti kaikenmoista säätämistä ennenkuin vihdoin sain kuvani näkymään.
Ja tälle duplikaatille aiheelle voisi tehdä jotakin.
Voi aina kertoa, millä tavalla "projekti ei käänny", ja kai yritit kääntää sen ihan Dev-Cpp:n kääntötoiminnolla?
Luulen, että kaikilla näistä ongelmista valittavilla syynä on vain jokin oma virhe Dev-Cpp:n käytössä.
Niin pitäs, mutta kun sen projektin on tehny johonkin kansioon niin miten se dev -projekti tiedosto käännetään komentorivillä jos sen nimi on vaikka projectSDL.dev ja siinä on se projectSDL.cpp lähdekoodi alikansiona.
gcc .....................?
Minun projekti kansioni on "C:\SDL Project file" ja projektin tehtyä sinne tulee tällaisia logoja nimeltä:
ProjectSDL.ico
ProjectSDL_private
ProjectSDL_private
ProjectSDL.dev
Samassa kansiossa on myös tämä SDL.dll
Tehdään jo tästä pelle hommasta loppu, eikö?
.dev-tiedostolla ei ole mitään tekemistä kääntämisen kanssa, ja Dev-C++:n asetuksia on aivan turha säätää, jos komentoriviltä kääntää. Sen voisi aina alkuun kertoa, kun editorilla ei todellakaan ole mitään merkitystä koodin toiminnan kannalta.
Komentoriviltä käännät:
g++ ohjelma.cpp -o ohjelma.exe -lmingw32 -lSDLmain -lSDL
Tai:
gcc ohjelma.cpp -o ohjelma.exe -lmingw32 -lstdc++ -lSDLmain -lSDL
Kiitos ja kumarrus sinulle Metabolix tästä hyvästä neuvosta. SDL- koodini käänty ohjelmaksi. =D
Tuosta keskustelusta sai tosiaan sellaisen käsityksen, että Azure ei olisi edes yrittänyt kääntää ohjelmaa Dev-C++ :n valikoista, vaan aina komentoriviltä. Ohjelman pitäisi kääntyä ja käynnistyä aivan normaalisti painamalla F9, jos vaan ne linkkeriparametrit ovat kunnossa (niin kuin ne näyttävät olevankin).
Aihe on jo aika vanha, joten et voi enää vastata siihen.