Kirjautuminen

Haku

Tehtävät

Opasarkisto: SDL 1.2: SDL:n asennus

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.

Visual C++ 6

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

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.

Linux

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:

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ää.

Testaus:

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).

Mitäs nyt?

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

Kommentit

rndprogy [29.06.2004 23:40:18]

#

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.

BlueByte [30.06.2004 01:07:04]

#

tuleeko tälle jatkoa oikeasti ohjelmointia

Heikki [30.06.2004 16:34:25]

#

On tulossa, mutta toteuttaminen voi kestää...

Linkku [30.06.2004 17:34:22]

#

Tehkää, prkl, opas SDL:n asentamisesta Borlandiin.

WinC [30.06.2004 23:59:24]

#

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...

Aruviel [02.07.2004 10:24:25]

#

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 :).

Gwaur [02.07.2004 23:06:38]

#

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'.

Heikki [03.07.2004 02:13:46]

#

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.

(nimetön) [03.07.2004 12:21:35]

#

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.

(nimetön) [03.07.2004 12:21:38]

#

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.

Aruviel [03.07.2004 12:22:06]

#

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>

Heikki [18.07.2004 17:02:00]

#

Päivitin opasta. Nyt asennetaan headerit "oikein".
Päivitin myös koodivinkkini.

hunajavohveli [18.07.2004 18:53:19]

#

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.. :(

Aruviel [25.07.2004 20:10:20]

#

Muistaakseni itse purin nuo (.tar.gz:t) WinRarilla. Ilmeisesti pitää vähän nähdä vaivaa, jos tuollaisia yrittää Windowsissa purkaa ;)

Akseli F [27.07.2004 18:22:38]

#

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.

hunajavohveli [28.09.2004 22:33:48]

#

Vierekkäin on asennettu, eikä toimi edes "Hello World"...

Hellami [25.10.2004 20:07:54]

#

Tuota, jos tekee jonkun sovelluksen, käyttäen SDL:ää tarviiko siellä aina olla mukana tuo "SDL.dll"?

Heikki [29.10.2004 02:16:47]

#

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.

Heikki [17.11.2004 21:32:32]

#

Päivittelin opasta ajankuluksi, ja kirjoitin sorsasta kääntämisen.

nixe [11.12.2004 18:54:35]

#

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

Heikki [19.01.2005 11:00:25]

#

Katso jostain asetuksista millaisia rivejä linkkerille annetaan. Pitäisi olla jotain -lSDL ja -lSDLmain.

ville-v [03.03.2005 09:55:53]

#

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.

aWW [08.04.2005 10:32:44]

#

ä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

Heikki [08.04.2005 23:34:35]

#

SDL:ää voi toki koodata myös C:llä jolloin kätetään gcc:tä. C++-kielisien ohjelmien kanssa käytetään g++:aa.

aWW [13.04.2005 18:42:31]

#

Esimerkissä käännettiin tiedosto main.cpp, jolloin kyseessä on c++ tiedosto

ville-v [25.04.2005 18:43:52]

#

Ja ketään ei Devpak-ongelmani kiinnosta. Onneksi sain hankittua VisualC++ kuutosen.

hunajavohveli [05.06.2005 19:09:55]

#

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ä?

Heikki [19.06.2005 15:07:16]

#

En osaa sanoa muuta kuin, että parametrit gcc:lle ovat varmaankin -lSDL ja -lSDLmain

hunajavohveli [06.07.2005 13:11:28]

#

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

Puhveli [08.08.2005 18:09:52]

#

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.

jesses [10.01.2007 16:19:41]

#

mitenkäs tää asennettas CodeBlocs:ille

moptim [12.07.2007 12:02:28]

#

Get Dev-Cpp \o/

MikaBug [21.08.2007 11:38:24]

#

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

Zakki [25.11.2007 15:06:07]

#

ei toimi toi devpack linkki

Dude [15.01.2008 16:49:40]

#

Pitäis varmaan asentaa. Winrarista se että se vaan valittaa että pitäis rekitsteröidä. Saako tätä DOSille?

moptim [25.05.2008 16:51:18]

#

Muahaha, sen DevPakin voi löytää googlettamalla. http://eve.rau.ac.za/gfx/SDL-1.2.6.DevPak

moptim [25.05.2008 16:53:16]

#

Örp, eipä se pakkaakimanakeri tota hyväksy ku joku kusee. :(

Hakoulinen [22.06.2008 19:46:13]

#

Paulus M [21.07.2008 18:31:19]

#

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?

Alepale [02.01.2009 12:48:53]

#

Tulee Visual Studio 2008:lla:
Error 1 fatal error LNK1313: ijw/native module detected; cannot link with pure modules SDLmain.lib

Torgo [01.04.2009 14:32:32]

#

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ä.

Tuppu L [01.08.2009 08:52:43]

#

DevPak linkki ei toimi ainakaan itselläni:

http://test.nix.lv/devpak/SDL-1.2.6.DevPak

TVdata [01.12.2011 16:03:34]

#

Ei kyllä minullakaan.

pikkuArtsi [08.06.2015 11:39:40]

#

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

Kirjoita kommentti

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.

Muista lukea kirjoitusohjeet.
Tietoa sivustosta