Kirjoittaja: Heikki (2004).
⚠ Huomio! Tämä opas on vanhentunut. Oppaan sisältöön ei voi enää luottaa. Opas on säilytetty vain sen historiallisen arvon vuoksi. ⚠
SDL (Simple DirectMedia Layer) on helppokäyttöinen (peli)ohjelmointikirjasto C/C++ kielelle. Sillä onnistuu nopeahkon grafiikan piirron lisäksi myös näppäimistöjen, hiirien ja peliohjainten sekä äänien käsittely. SDL:n etuihin kuuluu myös koodin helppo portattavuus: SDL on saatavilla Windowssin lisäksi monille muille käyttöjärjestelmille, esim. Linuxille. SDL:n kanssa on myös helppo käyttää SDL:n lisäkirjastoja, joiden avulla on mahdollista esim. käyttää PNG-kuvia ja verkkoyhteyttä.
Lisätietoja löytyy SDL:n kotisivuilta.
Tässä oppaassa asennamme SDL:n Visual C++ 6:een, Dev-C++:n versioon 4.9.8.0 ja Linuxiin.
Aivan ensiksi sinun on ladattava SDL:n kehitystyökalut SDL:n sivuilta (Suora linkki).
Pura paketti johonkin hakemistoon, esimerkeissä sen oletetaan olevan hakemistossa C:\SDL.
Avaa nyt Visual C++ ja valitse uusi tyhjä Win32-sovellus.
Luo SDL:n include-kansioon (esim. C:\SDL\include) kansio SDL ja siirrä sinne kaikki kansion tiedostot.
Mene Tools-valikon Options kohtaan ja siellä directories-välilehdelle, ja tarkista että "Show directories for:"-kohdassa on valittuna Include files.
Paina nyt New-nappia (nelikulmio rastin vieressä Included-files tekstin alapuolella) ja kirjoita/hae SDL\include-hakemisto (esim. C:\SDL\include).
Valitse "Show directories for:" kohtaan Library files ja hae samasta SDL:n hakemistosta lib-hakemisto (esim. C:\SDL\lib).
Mene Project - Settings ja valitse C/C++-välilehti. Category valikosta valitse code generation. Kohtaan Use run-time library valitse Multithreaded DLL.
Mene Project - Add to project - File ja hae SDL:n lib-hakemistosta (esim. c:\SDL\lib) tiedostot SDL.lib ja SDLmain.lib.
Tämän voi hoitaa myös seuraavalla koodilla:
#pragma comment(lib, "SDLmain.lib") #pragma comment(lib, "SDL.lib")
SDL on nyt asennettu! Katso lopusta miten testaat toimivuuden.
HUOM! SDL toimii näillä ohjeilla myös VC++ 2005 Betan kanssa, mutta muisin käsittely ei toimi kunnolla, ja ohjelma alkaa varaamaan muistia jotenkin oudosti. Tämän seurauksena ohjelma kaatuu vähintäänkin lopussa. Tämä johtunee kääntäjän bugista.
Dev-C++:aan asennus on todella helppoa! Sinun tarvitsee vain ladata SDL:n DevPack ja asentaa se. Asennus hoituu kaksoisnäpäyttämällä lataamaasi pakettia ja painelemalla nextiä.
Kun luot uuden projektin, valitse graphics-välilehden alta SDL-ohjelma, jolloin linkkerille annetaan käännettäessä oikeat asetukset (toinen vaihtoehto on lisätä käsin linkkeriasetuksiin -lSDL ja -lSDLmain
Asennus ilman DevPackia onnistuu myös. Ohjeet tähän Aruviel:in kommentissa alhaalla. Kiitoksia hänelle.
SDL:n käyttö Linuxissa GCC:llä on myös helppoa. SDL:n kirjastot löytyvät lähes kaikkien jakelupakettien pakettivarastoista nimellä libsdl-dev (tai vastaava). RPM-pohjaista paketinhallintajärjestelmää käyttävissä jakeluissa on mahdollista asentaa myös SDL:n sivuilta löytyvät RPM-paketit:
Lataa SDL:n ajonaikaiset kirjastot ja kehitystyökalut.
Asenna paketit komennoilla:
rpm -Uvh SDL-devel-1.2.7-1.i386.rpm rpm -Uvh SDL-1.2.7-1.i386.rpm
Huomaa, että komennot vaativat pääkäyttäjän oikeudet. Kommennot tekevät myös kaikki tarvittavat asetukset.
Kääntäminen onnistuu komennolla:
#C gcc -o main main.c -lSDL #C++ g++ -o main main.cpp -lSDL
Lähdekoodipaketista asennus sujuu UNIX-käyttäjille tutulla tavalla. Ensin ladataan SDL:n lähdekoodipaketti ja sitten käännetään se:
tar xvzf SDL-x.x.x.tar.gz cd SDL-x.x.x ./configure make su make install
Muista kuitenkin, että ohjelmien asentaminen paketinhallinnan ohi ei yleensä ole järkevää.
Nyt on enään vuorossa testaus: toimiko asennus. Kokeilepa kääntää vaikka tämä koodi.
Jos ei toimi, tarkista vielä että olet tehnyt asennuksen kaikki vaiheet. Huomaa myös, että Windowssia käytettäessä exen kanssa samassa hakemistossa on oltava SDL.dll niminen tiedosto (tai sen on sijaittava Windows\System32-kansiossa), joka löytyy SDL:n hakemistosta (esim. C:\SDL). Dev-C++:n käyttäjät voivat kokeilla myös esimerkkiä, joka löytyy New Project valikosta MultiMedia välilehdeltä (sieltä kaksoisnäpäytä kohtaa SDL).
Ohjelmointiputkasta löytyy SDL:ään perusopassarja:
Osa1 - Osa2 - Osa3 - Osa4
Lisäksi kannattaa vierailla seuraavissa osoitteissa:
SDL:n omat sivut
Marius Andran erinomainen opassarja
Viimeksi muokattu 26.7.2005
Kerran taisi tulla jopa käännettyy jotain SDL koodia joten olen luultavasti onnistunut sen asentamisessa. En tosin muista että olisin näitä asioita tehnyt mitä tässä oppaassa on kerrottu.
tuleeko tälle jatkoa oikeasti ohjelmointia
On tulossa, mutta toteuttaminen voi kestää...
Tehkää, prkl, opas SDL:n asentamisesta Borlandiin.
SDL kannattaa asentaa siten, että myös #include <SDL/SDL.h> toimii(eli VC++n omaan include hakemistoon kansioon SDL), tällöin välttyy turhalta koodin muuttamiselta, jos esimerkiksi harjoitteluvaiheesa hakee netistä esimerkkikoodeja. (tämä ainakin oma mielipidie, mutta kukin päätynee sitten omiin ratkaisuihinsa)
ja toinen asia mikä tuli mieleen mikä säästää kummasti vaivaa on rivi:
#pragma comment(lib, "SDLmain.lib") jolla saa lisätty VC++ssa library tiedostot ilman niiden selaamista hakemistoista...
Olisi varmaan voinut mainita jotain sen suuntaista, että kaikissa linux-distroissa ei ole RPM-systeemiä. Mutta eiköhän Linuxia käyttävät ihmiset sen nyt tajua, vaikkakin siinä voisi olla, että miten homma hoituu eri distroilla.
Jos tuolla tavalla "yleisesti" Linux-otsikon alla alkaa palloilemaan, niin ehkäpä sourcesta kääntäminen olisi se oikea ratkaisu.
Mites asennus Dev-C++:lle onnistuisi ilman DevPakia? Jos DevPak vaikka sattuukin olemaan vähän vanhempi ja haluaisi käyttää sitä uusinta versiota?
Joo, miten minä jaksan koko ajan valittaa. Ihan riittävä opas tuo on :).
Tämä on varmaan niitä putkan lyhimpiä oppaita :D
Ja ymmärtääkseni Gentoolla SDL:n asennus onnistuu myös emergellä. Huomatkaa sana 'ymmärtääkseni'.
Itselläni ei ole Linuxista juurikaan kokemusta, joten en kovin syvällisesti Linux-asennusta voinut käydä lävitse. Eiköhän keskiverto Linux-käyttäjä osaa asentaa RPM-systeemmin koneellensa tai sitten kääntää sorsasta...
Dev-C++:n asennuksesta ilman Dev-Packia ei minulla ole mitään tietoa, ehkäpä siksi että en sitä käytä.
Mutta jos joku haluaa minua näistä asioista tarkemmin valaista niin päivittelen kyllä opasta tarpeen mukaan.
Gwaur: Olet aivan oikeassa.
Enpä usko, että kukaan haluaa edes yrittää RPM-systeemiä asentaa koneellensa, jos sellaista ei distron mukana tule. Eikä sitä edes ole kovin realistista yrittää asentaa.
Sorsasta kääntäminen olisi kuitenkin ollut se varmin tapa näyttää NIX-nikkareille, miten SDL asentuu. Tosin sellainen henkilö, jolla on distro, jossa ei ole paketinhallintaa, luultavasti tietää mitä tehdä. Ja ne henkilöt, joilla on hieno paketinhallinta, käyttävät sitten sitä.
Ja sitten vielä Mariuksen ohjeitten avulla, kuinka asentaa SDL Dev-C++:lle ilman DevPakia:
Ensimmäiseksi imuroi devlibit täältä: http://www.libsdl.org/release/SDL-devel-1.2.7-mingw32.tar.gz
Purat sen Dev-C++:n juurihakemistoon, jolloin kaikki tiedostot menevät oikeisiin kansioihin, kuten Mariuksen ohjeissa mainitaan. Sitten vain annat linkkerille nämä asetukset:
lainaus:
(Project -> Project Options -> Parameters)
-lmingw32 -lSDLmain -lSDL
Ja Execute->Compile&Run
Toivottavasti joku voisi varmentaa asian, ainakin minulla homma kääntyi virheittä. Käänsin Heikin esimerkkikoodin ja ajoin sen, tosin ilman bittikarttoja. Kursori ainakin tuli esille, jos ei muuta.
Gwaur: Olet aivan oikeassa.
Enpä usko, että kukaan haluaa edes yrittää RPM-systeemiä asentaa koneellensa, jos sellaista ei distron mukana tule. Eikä sitä edes ole kovin realistista yrittää asentaa.
Sorsasta kääntäminen olisi kuitenkin ollut se varmin tapa näyttää NIX-nikkareille, miten SDL asentuu. Tosin sellainen henkilö, jolla on distro, jossa ei ole paketinhallintaa, luultavasti tietää mitä tehdä. Ja ne henkilöt, joilla on hieno paketinhallinta, käyttävät sitten sitä.
Ja sitten vielä Mariuksen ohjeitten avulla, kuinka asentaa SDL Dev-C++:lle ilman DevPakia:
Ensimmäiseksi imuroi devlibit täältä: http://www.libsdl.org/release/SDL-devel-1.2.7-mingw32.tar.gz
Purat sen Dev-C++:n juurihakemistoon, jolloin kaikki tiedostot menevät oikeisiin kansioihin, kuten Mariuksen ohjeissa mainitaan. Sitten vain annat linkkerille nämä asetukset:
lainaus:
(Project -> Project Options -> Parameters)
-lmingw32 -lSDLmain -lSDL
Ja Execute->Compile&Run
Toivottavasti joku voisi varmentaa asian, ainakin minulla homma kääntyi virheittä. Käänsin Heikin esimerkkikoodin ja ajoin sen, tosin ilman bittikarttoja. Kursori ainakin tuli esille, jos ei muuta.
Gwaur: Olet aivan oikeassa.
Enpä usko, että kukaan haluaa edes yrittää RPM-systeemin asentamista koneellensa, jos sellaista ei distron mukana tule. Eikä sitä edes ole kovin realistista yrittää asentaa.
Sorsasta kääntäminen olisi kuitenkin ollut se varmin tapa näyttää NIX-nikkareille, miten SDL asentuu. Tosin sellainen henkilö, jolla on distro, jossa ei ole paketinhallintaa, luultavasti tietää mitä tehdä. Ja ne henkilöt, joilla on hieno paketinhallinta, käyttävät sitten sitä.
Ja sitten vielä Mariuksen ohjeitten avulla, kuinka asentaa SDL Dev-C++:lle ilman DevPakia:
Ensimmäiseksi imuroi devlibit täältä: http://www.libsdl.org/release/SDL-devel-1.2.7-mingw32.tar.gz
Purat sen Dev-C++:n juurihakemistoon, jolloin kaikki tiedostot menevät oikeisiin kansioihin, kuten Mariuksen ohjeissa mainitaan. Sitten vain annat linkkerille nämä asetukset:
lainaus:
(Project -> Project Options -> Parameters)
-lmingw32 -lSDLmain -lSDL
Ja Execute->Compile&Run
Toivottavasti joku voisi varmentaa asian, ainakin minulla homma kääntyi virheittä. Käänsin Heikin esimerkkikoodin ja ajoin sen, tosin ilman bittikarttoja. Kursori ainakin tuli esille, jos ei muuta.
Edit: Virheitä poijes. JA, Heikin esimerkkikoodin käänsin tehden yhden muutoksen: includettasin SDL-kirjaston näin (joka ilmeisesti johtuu siitä, että SDL-kamat include-kansiossa ovat SDL-kansion sisällä ;):
// Näin #include <SDL/SDL.h> // Ei näin #include <SDL.h>
Päivitin opasta. Nyt asennetaan headerit "oikein".
Päivitin myös koodivinkkini.
Mitenkä tuo DevPak oikein pitäisi purkaa? Windows ei ainakaan löydä mitään ohjelmaa sen avaamiseen, kun pakettia klikkaa. Samoin käy tuon Aruvielin mainitseman .gz-päätteisen paketin kanssa.
Edit: Olikin liian vanha versio DevCpp:stä. Hommasin 4.9.8.0:n, mutta se ei suostu ajamaan käännettyjä ohjelmia.. :(
Muistaakseni itse purin nuo (.tar.gz:t) WinRarilla. Ilmeisesti pitää vähän nähdä vaivaa, jos tuollaisia yrittää Windowsissa purkaa ;)
Ilmainen ultimatezip on myös hyvä.
Eikös WinRar ollut sharewarea?
Edit:
hunajavohveli kirjoitti:
Olikin liian vanha versio DevCpp:stä. Hommasin 4.9.8.0:n, mutta se ei suostu ajamaan käännettyjä ohjelmia.. :
Kiitti vinkistä! Nyt ohjelma tunnisti tuon DevPakin. Asensitko tuon uuden version vanhan päälle? Kun itse asensin ne toimimaan vierekkäin sain asennettua SDL:län ja ohjelmakin toimii edelleen.
Vierekkäin on asennettu, eikä toimi edes "Hello World"...
Tuota, jos tekee jonkun sovelluksen, käyttäen SDL:ää tarviiko siellä aina olla mukana tuo "SDL.dll"?
Koneelta on aina SDL:ää käyttävää ohjelmaa ajettaessa löydyttävä SDL.dll joko exe:n kanssa samasta kansiosta, tai sitten järjestelmäkansiosta (Windows\System32). Linuxissa on oltava asennettuna SDL:n ajonaikaiset kirjastot.
Päivittelin opasta ajankuluksi, ja kirjoitin sorsasta kääntämisen.
Ei onnistu sitte millään, tuo kyllä toimii kun luo uuden projektin ja pistää sen valmiin mediahomman mutta mikään muu ei toimikaan ?? Tulee vain pitkä rivi Linker Error ilmotuksia
Katso jostain asetuksista millaisia rivejä linkkerille annetaan. Pitäisi olla jotain -lSDL ja -lSDLmain.
Latasin Devpakin, mutta miten ihmeessä se suoritetaan!?! Eihän kaksoisnapauttamalla suoriteta kuin exe-, com- ja bat-päätteiset tiedostot, ei Devpak-päätteisiä! Eikä ainakaan IzArc tunnista sitä miksikään pakatuksi.
älkää kääntäkö komennolla "gcc -o main main.cpp -lSDL"
koska silloin tulostuu tällainen virhelmoitus:
"/tmp/cc3XMh9O.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status"
kääntäkä linuxissa komennolla
g++ -o main main.cpp -lSDL
kyseessä on kuitenkin c++ -ohjelma
SDL:ää voi toki koodata myös C:llä jolloin kätetään gcc:tä. C++-kielisien ohjelmien kanssa käytetään g++:aa.
Esimerkissä käännettiin tiedosto main.cpp, jolloin kyseessä on c++ tiedosto
Ja ketään ei Devpak-ongelmani kiinnosta. Onneksi sain hankittua VisualC++ kuutosen.
Mitenkäs homma toimii Wintoosassa gcc:llä ilman IDE:tä? Mitä tiedostoja tarvitaan ja mihin ne pitää pistää? Ja mitä parametrejä annetaan gcc:lle ja missä järjestyksessä?
En osaa sanoa muuta kuin, että parametrit gcc:lle ovat varmaankin -lSDL ja -lSDLmain
Tällaisilla parametreillä kuulemma onnistuu ja itse ainakin sain toimimaan. Tämän voisi ehkä lisätä oppaaseen, jos joku muukin haluaa ajaa komentoriviltä.
gcc source.c -o compiled.exe -lmingw32 -lSDLmain -lSDL 2> error.txt
Itsellänikin oli ongelma komentoriviltä kääntämiseen, ja se näkyi olevan pirullisen tarkka vipujen oikeasta järjestyksestä. Tuohon Hunajavohvelin viestiin lisäisin perään -mwindows, jos se mitään auttaa.
mitenkäs tää asennettas CodeBlocs:ille
Get Dev-Cpp \o/
Minulla tulee linkitysvaiheessa jompikumpi seuraavista virheilmoituksista. Missä vika voisi olla, ja miten sen sais korjattua?
1>LINK : fatal error LNK1104: cannot open file 'uuid.lib'
tai
1>LINK : fatal error LNK1561: entry point must be defined
ei toimi toi devpack linkki
Pitäis varmaan asentaa. Winrarista se että se vaan valittaa että pitäis rekitsteröidä. Saako tätä DOSille?
Muahaha, sen DevPakin voi löytää googlettamalla. http://eve.rau.ac.za/gfx/SDL-1.2.6.DevPak
Örp, eipä se pakkaakimanakeri tota hyväksy ku joku kusee. :(
Tällä sain ainakin omaan Deviini toimimaan: http://sourceforge.net/project/downloading.php?
Kokeilin tuota Hakoullisen fileä, mutta se on joku ihme tiedosto, jota tietokone ei tunnista, eikä sitä voi asentaa. Ilmeisesti se pitäisi vaan laittaa johonkin kansioon, mutta kun tietäis vaan minne?
Tulee Visual Studio 2008:lla:
Error 1 fatal error LNK1313: ijw/native module detected; cannot link with pure modules SDLmain.lib
Jos tätä opasta joku Visual C++ 2005 tai 2008 edition käyttäjä lukee ja ihmettelee kun ohjeen mukaan tehtäessä linkkeri herjaa: LINK : fatal error LNK1561: entry point must be defined
, niin tarkista projekti-asetuksista Linker->System->SubSystem
Siinä tulee määritellä linkkeri käyttämään Windows subsystemiä.
DevPak linkki ei toimi ainakaan itselläni:
Ei kyllä minullakaan.
Mikä aiheuttaa alla olevan virhee? (Dev-C++ 5.11 ja SDL-1.2.7)
C:\Users\Pinkki\Documents\sdl_testi\g++.exe [Error] unrecognized command line option '-SDLmain'
-pikkuArtsi
Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.