Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: SDL 2.0 Windows asennus

Sivun loppuun

DumTom [15.09.2013 04:59:53]

#

Minulla on Codeblocks 12.11 joka sisältää MinGW kääntäjän ja käyttiksenä win7.
Löysin kyllä kaikki SDL kakkosen bin,include ja lib tiedostot.
Nyt en tajua oikein mitä teen....
Pitääkö codeblocks asentaa uudelleen ilman MinGW:tä ennen kuin jatkan?
Tyhmä kysymys mutta ainakin yritin itse googlettaa neuvoja.

Metabolix [15.09.2013 11:06:02]

#

SDL2-oppaassa sanotaan, että tiedostot ”pitää itse purkaa kääntäjän include- ja lib-hakemistoihin”. Mitään ei tarvitse poistaa tai asentaa uudestaan, vaan ainoastaan SDL2:n tiedostot pitää itse purkaa kääntäjän include- ja lib-hakemistoihin. SDL2:n paketissa on sekä 32-bittinen että 64-bittinen käännös kirjastosta (i686 ja x86_64). Luultavasti näistä 32-bittinen on sinulle oikea.

Yritä nyt vielä. Tiedätkö, mikä on kääntäjä? Oletko löytänyt sen include- ja lib-hakemistot? Sinun pitäisi siirtää niihin SDL2:n hakemisto include/SDL2 ja kirjastotiedostot lib/libSDL2*, ei muuta. Ohjelman mukaan sinun pitää vielä laittaa SDL2.dll, ellet linkitä ohjelmaa staattisesti.

DumTom [20.09.2013 23:19:45]

#

Eli siis program files\codeblocks\MinGW\bin ja lib ja includeen kopioin nuo?
Mitäs vastaan codebloksin kysymykseen kun se kysyy SDL:än sijaintia?
Vai pitääkö aloittaa joku muu projekti kuin SDL?

Metabolix [20.09.2013 23:46:57]

#

Sinne niin include- ja lib-jutut. Ei tarvitse laittaa mitään bin-hakemistoon, vaan SDL2.dll tulee aina oman ohjelmasi mukaan. Sitten aloita ihan tavallinen console application ja lisää projektin asetuksiin linkkerin parametrit -lSDL2main ja -lSDL2. Jos ohjelmaan ilmestyy konsoli, kokeile lisätä vielä linkkerin parametri -mwindows tai poistaa parametri -mconsole.

DumTom [26.09.2013 04:18:40]

#

En saa linkkeriä löytämään SDL2_mainia,SDL2:kakkosta enkä mwindowsia vaikka olen laittanut linkkerin hakupolun lib hakemistoon.
Mikä auttaa?

johku90 [29.09.2013 10:46:45]

#

Ei sinun tarvitse määrittää linkkerin hakupolkua uudelleen, jos olet siirtänyt ne a-tiedostot sinne files\codeblocks\MinGW\lib -kansioon. Kääntäjän pitäisi löytää ne kyllä sieltä.

PS. Mitä se kääntäjä muuten nyt sanoo?

DumTom [30.09.2013 06:28:10]

#

c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/../../../../mingw32/bin/ld.exe: cannot find -lSDL2_main
c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/../../../../mingw32/bin/ld.exe: cannot find -lSDL_2
c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/../../../../mingw32/bin/ld.exe: cannot find -lmwindows

Tälläset virheet tulee.

Metabolix [30.09.2013 07:28:52]

#

No mitä jos kirjoittaisit sitten nuo parametrit oikein: -mwindows -lSDL2main -lSDL2.

DumTom [30.09.2013 22:22:37]

#

Sain kääntymään yksinkertaisen hello world ohjelman mutta jos yritän lisätä mwindows parametrin niin kääntäjä tekee siitä -lmwindowsin.

Lisäys:

#include <stdio.h>
#include <SDL.h>


int main(int argc, char** argv) {
    // Koodi tulee tänne.
    printf("JOO");
    return 0;
}

Koodi on noin yksinkertainen.
Mutta nyt virheitä tulee kaksi.

Parametrit ovat:
mwindows
SDLmain
SDL2

Virheet tässä:


lwindows -lmwindows -lSDL2main -lSDL2
c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/../../../../mingw32/bin/ld.exe: cannot find -lwindows
c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/../../../../mingw32/bin/ld.exe: cannot find -lmwindows
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
2 errors, 0 warnings (0 minutes, 0 seconds)

DumTom [01.10.2013 00:57:05]

#

Nyt näyttää tältä


mingw32-g++.exe -L"C:\Program Files (x86)\CodeBlocks\MinGW\lib" -o bin\Debug\koe3.exe obj\Debug\main.o -lSDL2main -lSDL2 -mwindows
C:\Program Files (x86)\CodeBlocks\MinGW\lib/libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
1 errors, 0 warnings (0 minutes, 0 seconds)

tgunner [01.10.2013 06:21:34]

#

-lmingw32 -lSDL2main -lSDL2 -mwindows

DumTom [01.10.2013 09:07:33]

#

edelleen valittaa tosta winmainista vaikka laitoin noi asetukset ja samassa järjestyksessä

Metabolix [01.10.2013 12:29:36]

#

Kokeile laittaa -mwindows ennen -lSDL2mainia.

DumTom [04.10.2013 15:44:19]

#

Edelleen valittaa winmainista. Mitä jos kokeilis new empty projectia? Kun tuo console ei toimi?

DumTom [09.10.2013 06:10:07]

#

Ei toimi millään opilla. HELP!

nomic [09.10.2013 09:34:33]

#

Linkkerille syötät seuraavat: -lmingw32 -lSDL2main -lSDL2 -mwindows
WinMain@16-ongelmasta pääset eroon, kun include-rivien jälkeen kirjoitat:

#undef main

Esimerkkikoodi joka oppaankin puolelta löytyy kääntyy tosin vaivattomasti ilman moista temppua.

Ettet olisi vain sotkenut tiedostoja keskenään? Ainakin tuo paketti minkä latailin sisälsi seuraavia hakemistoja: i686-w64-mingw, test ja x86_64-w64-mingw32.

Jos ei tuolla lähde toimimaan, olet sörkkinyt jotain pahemminkin.

DumTom [20.10.2013 15:59:53]

#

Sain koodin jossa oli vain #include <SDL/SDL2.h> kääntymään mutta kun yritin oppaan pitempää koodia niin alkoi sataa undefined referenceä.
Mikähän mättää?

Metabolix [20.10.2013 16:03:42]

#

Et ole vieläkään syöttänyt niitä linkkerin parametreja oikein.

Asenna Linux, niin pääset kaikista noista ongelmista. :D

DumTom [20.10.2013 16:29:04]

#

ole laittanut linkerin asetuksiin täsmälleen mitä on määrätty ja silti tätä ei saa toimimaan.

-------------- Build: Debug in koe (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe -L"C:\Program Files (x86)\CodeBlocks\MinGW\lib" -o bin\Debug\koe.exe obj\Debug\juu1.o obj\Debug\main.o -lmingw32 -lSDL2main -lSDL2
obj\Debug\juu1.o: In function `SDL_RenderCopyEx_Keskitetty':
D:/koe/SDL2.0 Koe/koe/juu1.c:10: undefined reference to `SDL_RenderCopyEx'
obj\Debug\juu1.o: In function `SDL_main':
D:/koe/SDL2.0 Koe/koe/juu1.c:15: undefined reference to `SDL_Init'
D:/koe/SDL2.0 Koe/koe/juu1.c:16: undefined reference to `SDL_GetError'
D:/koe/SDL2.0 Koe/koe/juu1.c:21: undefined reference to `SDL_Quit'
D:/koe/SDL2.0 Koe/koe/juu1.c:26: undefined reference to `SDL_CreateWindowAndRenderer'
D:/koe/SDL2.0 Koe/koe/juu1.c:27: undefined reference to `SDL_GetError'
D:/koe/SDL2.0 Koe/koe/juu1.c:32: undefined reference to `SDL_SetWindowTitle'
D:/koe/SDL2.0 Koe/koe/juu1.c:35: undefined reference to `SDL_SetHint'
D:/koe/SDL2.0 Koe/koe/juu1.c:36: undefined reference to `SDL_RenderSetLogicalSize'
D:/koe/SDL2.0 Koe/koe/juu1.c:40: undefined reference to `SDL_RWFromFile'
D:/koe/SDL2.0 Koe/koe/juu1.c:40: undefined reference to `SDL_LoadBMP_RW'
D:/koe/SDL2.0 Koe/koe/juu1.c:42: undefined reference to `SDL_GetError'
D:/koe/SDL2.0 Koe/koe/juu1.c:48: undefined reference to `SDL_CreateTextureFromSurface'
D:/koe/SDL2.0 Koe/koe/juu1.c:49: undefined reference to `SDL_FreeSurface'
D:/koe/SDL2.0 Koe/koe/juu1.c:54: undefined reference to `SDL_SetRenderDrawColor'
D:/koe/SDL2.0 Koe/koe/juu1.c:55: undefined reference to `SDL_RenderClear'
D:/koe/SDL2.0 Koe/koe/juu1.c:58: undefined reference to `SDL_SetRenderDrawColor'
D:/koe/SDL2.0 Koe/koe/juu1.c:59: undefined reference to `SDL_RenderFillRect'
D:/koe/SDL2.0 Koe/koe/juu1.c:63: undefined reference to `SDL_QueryTexture'
D:/koe/SDL2.0 Koe/koe/juu1.c:68: undefined reference to `SDL_RenderCopy'
D:/koe/SDL2.0 Koe/koe/juu1.c:73: undefined reference to `SDL_RenderCopyEx'
D:/koe/SDL2.0 Koe/koe/juu1.c:80: undefined reference to `SDL_RenderCopyEx'
D:/koe/SDL2.0 Koe/koe/juu1.c:90: undefined reference to `SDL_RenderPresent'
D:/koe/SDL2.0 Koe/koe/juu1.c:93: undefined reference to `SDL_Delay'
D:/koe/SDL2.0 Koe/koe/juu1.c:52: undefined reference to `SDL_PumpEvents'
D:/koe/SDL2.0 Koe/koe/juu1.c:52: undefined reference to `SDL_PeepEvents'
D:/koe/SDL2.0 Koe/koe/juu1.c:52: undefined reference to `SDL_GetTicks'
D:/koe/SDL2.0 Koe/koe/juu1.c:97: undefined reference to `SDL_DestroyTexture'
D:/koe/SDL2.0 Koe/koe/juu1.c:98: undefined reference to `SDL_DestroyRenderer'
D:/koe/SDL2.0 Koe/koe/juu1.c:99: undefined reference to `SDL_DestroyWindow'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
30 errors, 0 warnings (0 minutes, 0 seconds)

Metabolix [20.10.2013 16:39:35]

#

Alkoi sen verran ärsyttää, että testasin.

  1. Latasin ja asensin uusimman Code::Blocksin (MinGW:n sisältävän version).
  2. Latasin ja purin SDL 2.0:n MinGW-version.
  3. Siirsin SDL:n otsikkotiedostot (SDL2-2.0.0/i686-w64-mingw32/include/SDL2) oikeaan paikkaan (CodeBlocks/MinGW/include/SDL2).
  4. Siirsin SDL:n kirjastotiedostot (SDL2-2.0.0/i686-w64-mingw32/lib/libSDL2*) oikeaan paikkaan (CodeBlocks/MinGW/lib).
  5. Käynnistin Code::Blocksin.
  6. Loin uuden komentoriviohjelman (Console application).
  7. Avasin Project-valikosta kohdan Build options ja siitä välilehden Linker options ja lisäsin kohtaan Other linker options parametrit -lmingw32 -lSDL2main -lSDL2.
  8. Kopioin ohjelman main.cpp:hen oppaan esimerkkikoodin ja käänsin.
  9. Kopioin SDL2:n ajonaikaisen kirjaston (SDL2-2.0.0/i686-w64-mingw32/bin/SDL2.dll) samaan hakemistoon äsken luomani ohjelman exe-tiedoston kanssa.
  10. Loin ohjelman tarvitseman kuva.bmp:n.
  11. Suoritin ohjelman.

Jos homma ei toimi, asenna vaikka Code::Blocks uudestaan. Tarkista myös, ettet ole sekoillut jotain erillisten Debug- ja Release-asetusten kanssa: tarvitset parametrit siihen, jota käytät, tai turvallisesti molempiin.

DumTom [20.10.2013 16:53:58]

#

Koetan noita illemmalla.
En oo laittanu noita juttuja other linker optionsiin.
Vaan siihen toiseen joka tuottaa lisä-ällän joten olen laittanut ne ilman -l alkua.
Kiitos

Lisäys: Sain toimimaan. Kiitos. Mulle pitää kaikki vääntää rautalangasta näköjään.


Sivun alkuun

Vastaus

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

Tietoa sivustosta