Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: SDL-projekti yhdeksi tiedostoksi?

Sivun loppuun

Ville [13.11.2009 08:34:55]

#

Kielenä siis C ja editorina Dev-Cpp.

Olen nyt saanut pienen SDL ohjelman kyhättyä kasaan (kiitos teidän avustuksen) ja projektiin kuuluukin useampi tiedosto.
Ohjelma tarvitsee SDL:n dll tiedostoja sekä fonttitiedoston toimiakseen.

Onko Dev-Cpp:ssä itsessään jokin toiminto jolla nuo lisätiedostot ja ohjelman saa paketoitua yhteen .exe tiedostoon. Nythän nuo lisätiedostot pitää kuskata mukana jos haluan ohjelmaa muualla kuin omalla koneella käyttää.

Visual C++:ssa oli muistaakseni release ja debug vaihtoehdot asetuksissa jolla sai tuon asian hoidettua ja jotain samantyyppistä koetin Devistäkin etsiä mutta en löytänyt...

Vai hoidetaanko tämä homma komentorivillä, jos hoidetaan, niin miten?

Metabolix [13.11.2009 10:49:18]

#

Jotta SDL.dll:stä pääsisi eroon, SDL pitäisi linkittää ohjelmaan staattisesti. Ei ole hankalaa, jos osaat homman, mutta jos et osaa, voi olla hyvinkin hankalaa. Ainakin joutuisit todennäköisesti kääntämään SDL:n itse. Muista myös huomioida SDL:n käyttöön liittyvät lisenssiehdot, jotka melkeinpä vaativat erillisen tekstitiedoston pakettiin linkityksestä riippumatta, staattisesti linkitettynä vielä selvemmin.

SDL:n kanssa tiedostotkin on mahdollista liittää ohjelmaan, jolloin niiden lataamiseen pitää käyttää SDL:ssä mutkikkaampaa tapaa.

const void *data;      // Jostain kaivat osoittimen dataan.
const int datan_koko;  // Jostain tiedät datan määrän.
const int ptsize = 12; // Fontin koko, vanha juttu.
TTF_Font *fontti;
fontti = TTF_OpenFontRW(SDL_RWFromConstMem(data, datan_koko), 1, ptsize);

Varsinaisessa datan paketoinnissa pitäisi sitten käyttää resurssitiedostoa ja datan hakemisessa Windowsin resurssifunktioita. Toinen vaihtoehto on muuttaa tiedosto C:n lähdekoodiksi ja liittää sellaisena. Koodia tulee melkoisesti. Muunnos on helppo tehdä pienellä ohjelmalla.

const char fonttitiedosto[] = "\x12\x43\x35"; // Tiedosto heksamuodossa.
const int fonttitiedoston_koko = 3;
// Nämä sitten sijoitat edellisen koodin dataosoittimeen ja datan kokoon.

Kannattaa muistaa fontinkin tekijänoikeudet ja lisenssiehdot, jotka ehkä kieltävät tällaisen (tai kaiken muunkin) käytön. Älähän käytä laittomia fontteja!

Helpompi vaihtoehto olisi tehdä ohjelmasta itse purkautuva zip-paketti. Eikö niihinkin saa jonkin autorun-toiminnon?

mikkop92 [18.11.2009 21:39:35]

#

Jos linkität SDL:n staattisesti, on sinun lisenssiehtojen mukaan jaettava joko lähdekoodi tai objektikoodi.

Ohjelma kannattaa jakaa vaikka zip-pakettina, ellet halua julkaista koodeja.

Ville [19.11.2009 18:36:11]

#

Joo kyllä nyt taisi käydä niin että putosin kun eno veneestä tuon Metabolixin vinkin kanssa :D

Mutta eipä hätää, kaipa nuokin asiat ajan kanssa joskus valkenevat.
Mutta sen verran kysyn vielä että onko tuolla Metabolixin vinkillä mitään tekemistä sen asian kanssa että käännetään lähdekoodi ensin gcc:llä objektitiedostoksi ja sen jälkeen käännetään nuo dll tiedostot pakettiin mukaan?

Ja sitten tutkailin tuota LGPL-lisenssi juttua netissä ja nyt täytyy sanoa että on nuppi niin pyörällä....että.

Ei niin että täällä mitään kaupiteltavan tasoista SDL ohjelmistoa vuosiin aikaan saadaan mutta kuka tietää, ehkä joskus ;p
Niin olisi varmaan hyvä tietää tuon lisenssin kuviot.

Koetin sitä lisenssiäkin lukea mutta jo hyvissä ajoin ennen puoltaväliä mopo lähti käsistä.
Harmi ettei siitä ole missään suomennosta, kuten on GPL-lisenssistä.

Mutta voidaanko karkeasti sanoa että jos tulevan ohjelmani lisäksi laitan ne dll tiedostot, kuten täällä ehdotettiin samaan pakkaukseen, niin se riittää tuon lisenssin ehdon täyttymiseen?
Vai pitääkö siihen samaan pakettiin vielä änkeä kopio lisenssistä?
Ja vielä, onko jotain muuta huomioitavaa?

Miten te olette tuon kuvion ratkaisseet?

Kun jonkin jutun mukaan jäin siihen käsitykseen että voi olla mahdollista joutua oma koodi joka tapauksessa julkistamaan.

Ja kuinka turvallisena voi pitää tuossa fontti kysymyksessä sitä että esim. googleen iskee "taikasanoiksi" free fonts tms. ja käyttää haun löytämiä fontteja omassa ohjelmassaan, ilman että tarvitsee postilaatikosta pelätä nostavansa mitään vaateita.

Metabolix [19.11.2009 19:03:37]

#

Selitykseni tiedostoista koski nimenomaan datatiedostoja. DLL-tiedostoa ei voi linkittää mihinkään edelleen, vaan ainoa ratkaisu on kääntää koko SDL uudestaan lähdekoodeista staattiseksi kirjastoksi. Jos linkität SDL:n staattisesti, velvollisuutesi on toimittaa (pyydettäessä) lähdekoodit tai objektitiedostot, joista ohjelman voi linkittää uudestaan.

SDL:ää käyttäessä täytyy joka tapauksessa änkeä pakettiin maininta SDL:n käytöstä ja koko LGPL. Kaupallisuudella ei ole merkitystä, säännöt ovat samat kaikille.

LGPL:n varsinainen ero tavalliseen GPL:ään on, että GPL vaatii lähdekoodin julkaisemisen aina mutta LGPL sallii linkittämisen irrallisiin DLL-tiedostoihin. Tällä on pyritty lisäämään vapaan lähdekoodin kirjastojen käyttöä kaupallisissa projekteissa, joiden lähdekoodeja ei haluta julkaista.

"Free fonts" on hakusanana suunnilleen yhtä luotettava kuin "Free Software". "Public Domain Fonts" olisi jo hieman parempi hakutermi. Kannattaa aika tarkkaan katsoa, miltä sivu näyttää. Parasta on hakea fontit tekijän sivuilta tai muusta ilmeisen luotettavasta lähteestä ja siinä samalla tarkistaa lisenssiehdot. Voi olla, että fontin tekijä haluaa pakettiin oman lisenssitiedostonsa tai maininnan README-tiedostoon.

Minusta tuollainen yhden tiedoston politiikka ei ole tavoittelemisen arvoista. Oletko miettinyt, miksi haluat toimittaa ohjelman noin? Oma ratkaisuni olisi tehdä yksi paketti (vaikka sitten automaattisesti purkautuva), jossa voisi olla ihan tarpeen mukaan tiedostoja. Päivityksiäkin on helpompi levittää, kun kirjastot ja datatiedostot usein pysyvät ennallaan ja tarvitsee ladata vain uusi ohjelmatiedosto. Sitä paitsi kaikilla on parempi mieli, kun homma on hoidettu laillisesti ja kunnia fonteista, musiikeista, grafiikasta ja kirjastoista menee oikeille henkilöille.

Kasp3r [19.11.2009 21:57:58]

#

Ajattelin itsekin tälläistä ennen, mutta Metabolixin hienon kommentin jälkeen taidan jättää etes yrittämättä.

Mutta kysytään nyt tähän samaan keskusteluun että, tarvitseeko Exen kanssa pelkät DLL tiedostot jos haluaa tuota omaa ohjelmaa runittaa toisella koneella missä ei ole SDL:llää "asennettu" ja mikä voisi olla syy kun exen kautta heittää bluescreeniä, mutta Dev-cppssä ohjelma pyörii hienosti.

Metabolix [19.11.2009 22:04:03]

#

Kasp3r kirjoitti:

Tarvitseeko Exen kanssa pelkät DLL tiedostot

Joo.

Kasp3r kirjoitti:

Mikä voisi olla syy kun exen kautta heittää bluescreeniä, mutta Dev-cppssä ohjelma pyörii hienosti.

Varmaan ohjelmassa on jokin paha bugi (todennäköisesti viallinen osoitin), joka ei vain tule Dev-C++:n sisällä esiin. Näin käy joskus, ja tällaisia bugeja on harvinaisen ikävä etsiä.

Grez [19.11.2009 22:15:47]

#

Eikös toi vaadi käytännössä jonkun bugisen ajurinkin. Mielestäni käyttäjän avaruudesta käsin ei pitäisi pystyä kaatamaan konetta (toki se käytännössä onnistuu, kun käyttiksessä ja ajureissa on bugeja)

Kasp3r [20.11.2009 08:44:31]

#

Äh...En ikinä tule löytämään sitä bugia, näyttää sitlä että joudun kirjottamaan koko homman uusiks :/

Ville [20.11.2009 09:57:54]

#

Metabolix kirjoitti:

SDL:ää käyttäessä täytyy joka tapauksessa änkeä pakettiin maininta SDL:n käytöstä ja koko LGPL. Kaupallisuudella ei ole merkitystä, säännöt ovat samat kaikille.

OK.
Voiko asian siis käytännössä hoitaa niin että käy vaikkapa tässä osoitteessa : http://www.gnu.org/licenses/lgpl-3.0.txt ja kopioi lisenssin johonkin kansioon ja jossain ohjelman About/Tietoa tai credits osiossa mainitaan ohjelman käyttävän kyseisiä kirjastoja ja kerrotaan että lisenssi on luettavissa ohjelman kansiosta x.

lainaus:

"Free fonts" on hakusanana suunnilleen yhtä luotettava kuin "Free Software". "Public Domain Fonts" olisi jo hieman parempi hakutermi. Kannattaa aika tarkkaan katsoa, miltä sivu näyttää. Parasta on hakea fontit tekijän sivuilta tai muusta ilmeisen luotettavasta lähteestä ja siinä samalla tarkistaa lisenssiehdot. Voi olla, että fontin tekijä haluaa pakettiin oman lisenssitiedostonsa tai maininnan README-tiedostoon.

Eli tarkkana saa olla tuonkin asian kanssa @_@

lainaus:

Minusta tuollainen yhden tiedoston politiikka ei ole tavoittelemisen arvoista. Oletko miettinyt, miksi haluat toimittaa ohjelman noin? Oma ratkaisuni olisi tehdä yksi paketti (vaikka sitten automaattisesti purkautuva), jossa voisi olla ihan tarpeen mukaan tiedostoja. Päivityksiäkin on helpompi levittää, kun kirjastot ja datatiedostot usein pysyvät ennallaan ja tarvitsee ladata vain uusi ohjelmatiedosto.

Ehkä ilmaisin itseni vähän huonosti edellisessä viestissäni...
Tarkoitukseni ei tosiaankaan ole tavoitella tuota yhden tiedoston politiikkaa.
Ei minulla ole mitään sitä vastaan että pakataan tiedostot ja käyttäjän päässä puretaan ne jollain konstilla hallitusti.

Syy miksi kyselin lisää mainitsemastasi tiedostojen kääntämisestä jne. on se että tahdoin vain tietää mitä sillä tarkoitetaan ja miten se tehtäisiin. Sillä tässä koko ajan tulee eteen uusia asioita / termejä ja yritän niitä sisäistää ja siinä samalla ehkä oppiakin jotain.

lainaus:

Sitä paitsi kaikilla on parempi mieli, kun homma on hoidettu laillisesti ja kunnia fonteista, musiikeista, grafiikasta ja kirjastoista menee oikeille henkilöille.

No tästä olen samaa mieltä :)

Kaiken kaikkiaan aika kimurantilta tämä ohjelmiston kehitys kuulostaa, ainakin näin harrastaja-taviksen näkövinkkelistä.

Onko muuten mitää kirjaa tai hyvää lähdettä netissä josta näihin asioihin pääsisi perehtymään?
Vai onko ainut tie oppiin, hakeutua johonkin koulutukseen, mutta mihin?

Metabolix [20.11.2009 11:26:47]

#

SDL:n sivuilla sanotaan näin:

lainaus:

To comply with this license, you must give prominent notice that you use the Simple DirectMedia Layer library, and that it is included under the terms of the LGPL license.
You must provide a copy of the LGPL license.

SDL:n lähdekoodipaketissa on mukana tiedosto README-SDL.txt, ja lisäksi kuuluu laittaa mukaan tuo LGPL-tiedosto (tosin aina sitä ei ole). Huomaa kuitenkin, että LGPLv3 on kirjoitettu GPLv3:n jatkoksi, joten sen kanssa pitäisi toimittaa myös varsinainen GPL.

Ville kirjoitti:

Kaiken kaikkiaan aika kimurantilta tämä ohjelmiston kehitys kuulostaa, ainakin näin harrastaja-taviksen näkövinkkelistä.

Ei siinä ole mitään mutkikasta. GPL ja LGPL ovat selkeitä lisenssejä, ja kaikilla merkittävillä kirjastoilla on varmasti jokin lisenssi, josta kerrotaan kirjaston sivuilla.

Jos itse kehittää kirjastoja, pitää olla jossain määrin perillä asioista. Muuten harrastelijalle riittää aika karkea luokittelu:
- kaikessa julkisessa käytössä maksullinen (paha)
- kaupallisessa käytössä maksullinen (tyydyttävä)
- ilmainen (LGPL, zlib)
- GPL

Muun sisällön kannalta ohjelmoinnissa pätee ihan samanlainen lainsäädäntö kuin muuallakin, eli tekijänoikeuden alaista materiaalia ei saa luvatta käyttää. Sivuilta pitää siis etsiä maininta, missä ja millä ehdoilla grafiikkaa tai musiikkia saa käyttää ja levittää. Ilmaistakin on, jos jaksaa etsiä.

Ville kirjoitti:

Onko muuten mitää kirjaa tai hyvää lähdettä netissä josta näihin asioihin pääsisi perehtymään?

Englanninkielinen Wikipedia ja projektien kotisivut ovat hyviä lähteitä. Opettavaista (vähintäänkin sivistävää) lukemista ovat FSF:n, Linuxin, GNU-projektin ja BSD:n vaiheet ja motiivit sekä GNU (L)GPL:n ja Creative Commons -lisenssien periaatteet. Muutenkin kannattaa välillä Wikipediasta lähteä vähän sivupoluille, sieltä se ohjelmoinnin yleissivistys helposti tarttuu mukaan. :) Kun mieleen kertyy tarpeeksi sanastoa, on helpompi keksiä tulevaisuudessakin hakusanoja, kun tulee ongelma tai jokin muuten vain kiinnostaa.

Ville kirjoitti:

Ei minulla ole mitään sitä vastaan että pakataan tiedostot ja käyttäjän päässä puretaan ne jollain konstilla hallitusti.

Jos asennusohjelman teko tuntuu liian vaikealta (tai turhalta, kuten minusta), voit hyvin pakata tiedostot itsepurkautuvaan pakettiin vaikka 7-Zip-ohjelmalla.

Ville [20.11.2009 12:11:45]

#

Kiitos, Metabolix.


Sivun alkuun

Vastaus

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

Tietoa sivustosta