Я пытался настроить среду C ++ для кода Visual Studio, которая работала, пока я не попытался использовать с ним SDL2.Я использую компилятор "g ++", который включен в mingw64.Я загрузил библиотеку разработки SDL2.09 для mingw.Я скопировал и вставил все файлы заголовков в папку include (это правильно, так как я не получаю ошибок о невозможности найти файл заголовка) и вставил библиотеки libs в папку libs (компилятор также может их найти),Я также скопировал и вставил DLL в каталог, в котором я компилировал код.Затем я собрал программу и продолжал получать ошибки.В зависимости от порядка библиотек, иногда случалось так, что есть несколько определений «main» или что-то в winMain.Иногда говорилось, что куча SDL не определена.Тем не менее, каждый раз, когда я запускал его, было последовательно то, что когда я использовал SDL_init или любую функцию SDL, он говорил, что ссылка не определена.
Я уже включил добавление библиотеки mingw32 вместе с другими библиотеками.Я также попытался изменить порядок библиотек, который получает различные результаты разных сообщений об ошибках, но ничего не получилось.Я попытался выполнить такую же настройку в eclipse ide с теми же сообщениями об ошибках.
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "g++_sdl2_build",
"command": "D:\\Coding\\mingw64\\bin\\g++.exe",
"args": [
"-lmingw32",
"-lSDL2main",
"-lSDL2",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe",
"-w"
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"type": "shell",
"label": "g++.exe build active file",
"command": "D:\\Coding\\mingw64\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "D:\\Coding\\mingw64\\bin"
}
}
]
}
^^^ - это мой файл tasks.json, в котором находится файл сборки.
#include <sdl.h>
#include <iostream>
using namespace std;
int main(int argc, char *args[])
{
if (SDL_Init(SDL_INIT_VIDEO) < 0)
{
cout << "SDL init failed" << endl;
return 1;
}
cout << "SDL init successful" << endl;
SDL_Quit();
return 0;
}
^^ - это мой cpp-файл, который я пытался скомпилировать
Одна ошибка после попытки сборки:
D:/Coding/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/SDL2main.lib(x64/Release/SDL_windows_main.obj):(.text[main]+0x0): multiple definition of `main'
D:/Coding/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x0): first defined here
C:\Users\YARHAR~1\AppData\Local\Temp\ccBO9BFb.o: In function `SDL_main':
d:/Coding/Github/cpp_coding/SDL_testing/sdl_test.cpp:8: undefined reference to `SDL_Init'
d:/Coding/Github/cpp_coding/SDL_testing/sdl_test.cpp:16: undefined reference to `SDL_Quit'
collect2.exe: error: ld returned 1 exit status
The terminal process terminated with exit code: 1
Другие ошибки после переключения порядка библиотек SDL2 и SDL2main:
D:/Coding/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/SDL2main.lib(x64/Release/SDL_windows_main.obj):(.text[main]+0x0): multiple definition of `main'
D:/Coding/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x0): first defined here
D:/Coding/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/SDL2main.lib(x64/Release/SDL_windows_main.obj):(.text[OutOfMemory]+0x1a): undefined reference to `SDL_ShowSimpleMessageBox'
D:/Coding/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/SDL2main.lib(x64/Release/SDL_windows_main.obj):(.text[main_getcmdline]+0xe4): undefined reference to `SDL_SetMainReady'
D:/Coding/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/SDL2main.lib(x64/Release/SDL_windows_main.obj):(.text[main_getcmdline]+0x131): undefined reference to `SDL_ShowSimpleMessageBox'
C:\Users\YARHAR~1\AppData\Local\Temp\ccOsF7gq.o: In function `SDL_main':
d:/Coding/Github/cpp_coding/SDL_testing/sdl_test.cpp:8: undefined reference to `SDL_Init'
d:/Coding/Github/cpp_coding/SDL_testing/sdl_test.cpp:16: undefined reference to `SDL_Quit'
collect2.exe: error: ld returned 1 exit status
The terminal process terminated with exit code: 1
Наилучший возможный случай ошибки - это когда в файл сборки я не включаю библиотеку mingw32, а также порядок библиотек: SDL2main и SDL2.В результате появляются следующие ошибки:
C:\Users\YARHAR~1\AppData\Local\Temp\ccjAeK0z.o: In function `SDL_main':
d:/Coding/Github/cpp_coding/SDL_testing/sdl_test.cpp:8: undefined reference to `SDL_Init'
d:/Coding/Github/cpp_coding/SDL_testing/sdl_test.cpp:16: undefined reference to `SDL_Quit'
collect2.exe: error: ld returned 1 exit status
The terminal process terminated with exit code: 1
Я надеюсь, что на самом деле смогу успешно скомпилировать программу и чтобы SDL2 действительно работал.