Я пытаюсь настроить установку Code :: Blocks для работы с графическим API SDL2. Как видно из документации, после того, как я все установил и правильно указал, я попробовал тест SDL_Init(SDL_INIT_EVERYTHING)
, как:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <SDL2/SDL.h>
int main (int argc, char *argv[])
{
if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
{
printf("\nSDL2 could not be initialized! Code: %s\n", SDL_GetError());
}
return EXIT_SUCCESS;
}
Однако я получил следующие ошибки:
...in function 'SDL_Main':
undefined reference to `SDL_Init`
undefined reference to `SDL_GetError`
undefined reference to 'WinMain@16'
Я посмотрел на эти ошибки, и они, кажется, происходят из-за того, что CodeBlocks используют 32-битный компилятор, но я использую 64-битную библиотеку SDL2. Это имеет смысл, так как мои связанные параметры:
-lmingw32 -lSDL2main -lSDL2
Итак, я использовал инструмент MinGW WinBuilds
для загрузки 64-битного форка MinGW, который дал мне огромное количество файлов в новом /mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/...
папка. Затем я перешел к CodeBlocks Settings -> Compiler -> Toolchain Executables
и указал соответствующие исполняемые файлы компилятора на исполняемый файл в bin
. Моей первой мыслью было изменить -lmingw32
на -lmingw64
, но это не сработало. Я получаю ошибку:
cannot find -lmingw64
На данный момент я не уверен, что я сделал правильно, неправильно, что сломано / работает и т. Д. c. и был бы очень признателен за любую возможную помощь.
Стоит также отметить, что я извлек 64-битный компилятор в C:\MinGW
и указал CodeBlocks на C:\MinGW\bin
в качестве каталога установки компилятора. Когда я нажимаю Auto-Detect
, он кажется достаточно счастливым и заявляет, что автоматически обнаружил компилятор G CC в этом месте. Следовательно, это должен быть мой неправильный флаг -lmingw64
или что-то еще, что я указал.
Редактировать: 64-разрядный компилятор был настроен и обнаружен правильно, но продолжал выдавать ошибки, относящиеся к SDL
функции:
||=== Build: Debug in Initialization_Test (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function `SDL_main':|
C:\C\SDL_C_Graphics\Init_Test\Initialization_Test\main.cpp|8|undefined reference to `_SDL_Init'|
C:\C\SDL_C_Graphics\Init_Test\Initialization_Test\main.cpp|10|undefined reference to `_SDL_GetError'|
C:\C\SDL_C_Graphics\Init_Test\Initialization_Test\main.cpp|10|undefined reference to `_printf'|
obj\Debug\main.o||In function `__tcf_0':|
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\iostream|74|undefined reference to `__ZNSt8ios_base4InitD1Ev'|
obj\Debug\main.o||In function `__static_initialization_and_destruction_0':|
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\iostream|74|undefined reference to `__ZNSt8ios_base4InitC1Ev'|
c:\mingw\lib\gcc\mingw32\8.2.0\include\c++\iostream|74|undefined reference to `_atexit'|
C:\SDL_Dev\SDL2-2.0.12\x86_64-w64-mingw32\lib\libSDL2main.a(SDL_windows_main.o)||In function `main_getcmdline':|
\Users\valve\release\SDL\SDL2-2.0.12-source\foo-x64\..\src\main\windows\SDL_windows_main.c|71|undefined reference to `SDL_main'|
||error: ld returned 1 exit status|
||=== Build failed: 8 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
Команды CodeBlocks могут выполняться для компиляции, в отдельном окне журнала:
x86_64-w64-mingw32-g++.exe -LC:\SDL_Dev\SDL2-2.0.12\x86_64-w64-mingw32\lib -LC:\SDL_Dev\SDL2-2.0.12\x86_64-w64-mingw32\lib -LC:\SDL_Dev\SDL_Img\SDL2_image-2.0.5\x86_64-w64-mingw32\lib -LC:\SDL_Dev\SDL_Mixer\SDL2_mixer-2.0.4\x86_64-w64-mingw32\lib -L"C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\lib" -o bin\Debug\Initialization_Test.exe obj\Debug\main.o -lmingw32 -lSDL2main -lSDL2 -lmingw32 -lSDL2main -lSDL2.dll -luser32 -lgdi32 -lwinmm -ldxguid
C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: i386 architecture of input file `obj\Debug\main.o' is incompatible with i386:x86-64 output