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.
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.
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?
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.
En saa linkkeriä löytämään SDL2_mainia,SDL2:kakkosta enkä mwindowsia vaikka olen laittanut linkkerin hakupolun lib hakemistoon.
Mikä auttaa?
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?
c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.
c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.
c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.
Tälläset virheet tulee.
No mitä jos kirjoittaisit sitten nuo parametrit oikein: -mwindows -lSDL2main -lSDL2
.
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.
c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.
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)
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):
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)
-lmingw32 -lSDL2main -lSDL2 -mwindows
edelleen valittaa tosta winmainista vaikka laitoin noi asetukset ja samassa järjestyksessä
Kokeile laittaa -mwindows ennen -lSDL2mainia.
Edelleen valittaa winmainista. Mitä jos kokeilis new empty projectia? Kun tuo console ei toimi?
Ei toimi millään opilla. HELP!
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.
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ää?
Et ole vieläkään syöttänyt niitä linkkerin parametreja oikein.
Asenna Linux, niin pääset kaikista noista ongelmista. :D
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)
Alkoi sen verran ärsyttää, että testasin.
-lmingw32 -lSDL2main -lSDL2
.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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.