linkowanie statyczne plików MinGW w CodeBlocks
Ostatnio zmodyfikowano 2022-10-17 17:08
AP1994 Temat założony przez niniejszego użytkownika |
» 2022-10-16 17:51:28 Zrobiłem tak jak radził pekfos. Wypakowałem kompilator w osobnej lokalizacji. Wersja gcc, która wyświetliła mi się w konsoli programu z komendą __VERSION__ to teraz:12.2.0 Niestety podczas kompilacji mojej gry dostałem błąd: undefined reference to `_setjmp' Build log: -------------- Build: Debug in platform game (compiler: GNU GCC Compiler)--------------- g++.exe -L"D:\moje programy\biblioteki\allegro-x86_64-w64-mingw32-gcc-12.1.0-posix-seh-static-5.2.8.0\lib" -o "platform game\2022-10-16 exe\platform game.exe" "platform game\2022-10-16 Debug\Collisions.o" "platform game\2022-10-16 Debug\default_creature.o" "platform game\2022-10-16 Debug\kontrolki.o" "platform game\2022-10-16 Debug\main.o" "platform game\2022-10-16 Debug\mapa.o" "platform game\2022-10-16 Debug\monster.o" "platform game\2022-10-16 Debug\player.o" "platform game\2022-10-16 Debug\Window.o" "platform game\2022-10-16 Debug\resouce.res" -static-libstdc++ -static-libgcc -static -s -lallegro_monolith-debug-static -ljpeg -ldumb -lwebp -lFLAC -lvorbisfile -lvorbis -logg -lphysfs -lfreetype -lpng16 -ldsound -lgdiplus -luuid -lkernel32 -lwinmm -lpsapi -lopengl32 -lglu32 -luser32 -lcomdlg32 -lgdi32 -lshell32 -lole32 -ladvapi32 -lws2_32 -lshlwapi -lpthread -lopusfile -lopus -lzlib -lmsvcrt -mwindows d:/program files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\moje programy\biblioteki\allegro-x86_64-w64-mingw32-gcc-12.1.0-posix-seh-static-5.2.8.0\lib\liballegro_monolith-debug-static.a(png.c.obj): in function `_al_load_png_f': C:/dev/allegro_winpkg/universal/allegro/addons/image/png.c:378: undefined reference to `_setjmp' d:/program files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\moje programy\biblioteki\allegro-x86_64-w64-mingw32-gcc-12.1.0-posix-seh-static-5.2.8.0\lib\liballegro_monolith-debug-static.a(png.c.obj): in function `_al_save_png_f': C:/dev/allegro_winpkg/universal/allegro/addons/image/png.c:528: undefined reference to `_setjmp' d:/program files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\moje programy\biblioteki\allegro-x86_64-w64-mingw32-gcc-12.1.0-posix-seh-static-5.2.8.0\lib\liballegro_monolith-debug-static.a(jpg.c.obj): in function `load_jpg_entry_helper': C:/dev/allegro_winpkg/universal/allegro/addons/image/jpg.c:178: undefined reference to `_setjmp' d:/program files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\moje programy\biblioteki\allegro-x86_64-w64-mingw32-gcc-12.1.0-posix-seh-static-5.2.8.0\lib\liballegro_monolith-debug-static.a(jpg.c.obj): in function `save_jpg_entry_helper': C:/dev/allegro_winpkg/universal/allegro/addons/image/jpg.c:307: undefined reference to `_setjmp' d:/program files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\moje programy\biblioteki\allegro-x86_64-w64-mingw32-gcc-12.1.0-posix-seh-static-5.2.8.0\lib\libfreetype.a(sfnt.c.obj):sfnt.c:(.text+0x496): undefined reference to `_setjmp' d:/program files/mingw/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:\moje programy\biblioteki\allegro-x86_64-w64-mingw32-gcc-12.1.0-posix-seh-static-5.2.8.0\lib\libfreetype.a(sfnt.c.obj):sfnt.c:(.text+0xbaf7): more undefined references to `_setjmp' follow collect2.exe: error: ld returned 1 exit status Process terminated with status 1 (0 minute(s), 0 second(s)) 7 error(s), 0 warning(s) (0 minute(s), 0 second(s))
samo setjmp() udało mi sie w internecie znaleźć, ale nie wiem jakiego potrzebuje pliku lib/a |
|
pekfos |
» 2022-10-16 18:17:38 setjmp() to biblioteka standardowa C i tu znowu wersja kompilatora jest zła. Pobierz wersję z "MSVCRT runtime" zamiast "UCRT" z winlibs.com. Dla jasności wcześniejsza wersja była wystarczająco dobra by zlinkować mój kod testowy, trzeba dodać al_init_image_addon() by zreprodukować aktualny problem. |
|
AP1994 Temat założony przez niniejszego użytkownika |
» 2022-10-17 14:07:26 Dziękuję wreszcie działa jak, należy i kompiluje się do pliku exe. A przy pomocy kilku funkcji: ALLEGRO_BITMAP * Load_PNG_Resouces( LPCSTR res ) { HMODULE hModule = GetModuleHandle( NULL ); HRSRC hResource = FindResource( hModule, res, RT_RCDATA ); HGLOBAL hMemory = LoadResource( hModule, hResource ); DWORD dwSize = SizeofResource( hModule, hResource ); LPVOID lpAddress = LockResource( hMemory ); ALLEGRO_FILE * f = al_open_memfile( lpAddress, dwSize, "r" ); return al_load_bitmap_f( f, ".png" ); al_fclose( f ); } ALLEGRO_FONT * Load_TTF_Resouces( LPCSTR res, int fsize ) { HMODULE hModule = GetModuleHandle( NULL ); HRSRC hResource = FindResource( hModule, res, RT_FONT ); HGLOBAL hMemory = LoadResource( hModule, hResource ); DWORD dwSize = SizeofResource( hModule, hResource ); LPVOID lpAddress = LockResource( hMemory ); ALLEGRO_FILE * f = al_open_memfile( lpAddress, dwSize, "r" ); return al_load_ttf_font_stretch_f( f, ".ttf", 0, fsize, 0 ); al_fclose( f ); } ALLEGRO_SAMPLE * Load_MP3_Resouces( LPCSTR res ) { HMODULE hModule = GetModuleHandle( NULL ); HRSRC hResource = FindResource( hModule, res, RT_RCDATA ); HGLOBAL hMemory = LoadResource( hModule, hResource ); DWORD dwSize = SizeofResource( hModule, hResource ); LPVOID lpAddress = LockResource( hMemory ); ALLEGRO_FILE * f = al_open_memfile( lpAddress, dwSize, "r" ); return al_load_sample_f( f, ".mp3" ); al_fclose( f ); }
Mój program będzie 1 plikiem wykonywalnym i folderem z mapami. |
|
pekfos |
» 2022-10-17 17:08:47 Tylko popraw te al_fclose(), bo jest nieosiągalne za returnem. |
|
1 2 3 4 5 « 6 » |