Päätinpä aikani kuluksi tehtailla pientä nettisoftaa med c++ + sdl. Useimmilla kavereilla on kuitenkin käytössä windowssit, joten ajattelin ristiinkääntämistä opetella, mm näillä ohjeilla. Pieni sdl-testisofta pelittääkin hienosti, samoin projektin serveriosa. Clienttipuoli kuitenkin pukkaa linkkausvaiheessa virheitä:
edax_engine.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' edax_engine.o:(.rodata._ZTVN4Edax6EngineE[_ZTVN4Edax6EngineE]+0x10): undefined reference to `__cxa_pure_virtual' edax_engine.o:(.rodata._ZTIN4Edax6EngineE[_ZTIN4Edax6EngineE]+0x0): undefined reference to `_ZTVN10__cxxabiv117__class_type_infoE'
Näitä edeltää kasa undefined referencejä sekä omiin että sdl:n funktioihin. Linkkaus tapahtuu pauttiarallaa näin:
i586-mingw32msvc-g++ `/usr/local/cross-tools/bin/sdl-config --cflags` kasa_objektifiluja.o `/usr/local/cross-tools/bin/sdl-config --libs` -lSDL -lSDL_image -lSDL_ttf -lSDL_net -o client_win.exe
Linuxille koko roska kääntyy ja linkittyy ongelmitta g++:lla.
Ellei tuohon osaa kukaan sanoa suoraan mitään, kaikki linux -> windows -kääntämiskokemukset ja -ohjeet ovat tervetulleita. Ubuntu 7.10 käytössä.
Ongelma itsessään näyttäisi kovasti C++:n ja C:n eroilta, mutta tästä ei pitäisi olla kyse, kun kerran on g++ käytössä.
Varmasti olet kääntänytkin ne koodit tuolla mingw-g++:lla etkä tavallisella?
Sellainen kokemus ainakin on, että Ubuntun varastoista löytyvä mingw32-paketti toimii varsin mallikkaasti ja kirjastoja saa helposti pihistettyä vaikkapa Dev-C++:n DevPakeista. Mitään ongelmia ei ole ollut, SDL, SDL_gfx ja OpenGL ovat jo olleet käytössä. Minusta on siis aivan turha lähteä itse kääntämään kääntäjää, kun valmistakin tavaraa on saatavilla.
Metabolix kirjoitti:
Varmasti olet kääntänytkin ne koodit tuolla mingw-g++:lla etkä tavallisella?
Dodii. Päätin sitten katsoa virheilmoitukset vielä kertaalleen läpi, vaikka oikeastaan aloitin jo projektin puolittain alusta. Ihmettelin sitten, kun viittausvirheitä näytti tulevan oikeastaan vain yhdestä filusta. Käänsin koko roskan komentoriviltä makefilen sijaan, varmuudeksi, samat virheet. Sitten käänsin virhefilun uudestaan ja linkitin, PAM, virheetön linkitys O_o. Pitkähkön makefilen yksi $(CC) -kohta oli jäänyt muotoon g++ :D
No, hienoa että selvisi, kiitoksia :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.