当 G++ 未给出错误时,使用 LD 对 `SDL2_Init` 的未定义引用

Undefined Reference to `SDL2_Init` with LD when G++ is not giving an error

(仅供参考,我确实知道存在类似的问题,但我已经尝试了所有答案。)

我正在尝试使用 MinGW 设置 SDL2,除此之外我已经设置了所有内容。每当我尝试编译 G++ 时都没有错误,但是 LD 给我一个:undefined reference to SDL_Init Error.

c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\user\AppData\Local\Temp\cc28dE2R.o: in function `SDL_main':
C:\Users\user\Documents\SDL2/src/main.cpp:11: undefined reference to `SDL_Init'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\user\Documents\SDL2/src/main.cpp:14: undefined reference to `SDL_GetError'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\user\Documents\SDL2/src/main.cpp:18: undefined reference to `IMG_Init'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\user\Documents\SDL2/src/main.cpp:20: undefined reference to `SDL_GetError'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../libmingw32.a(main.o):(.text.startup+0xc0): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
The terminal process "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command C:\MinGW\bin\g++.exe -g src\*.cpp -o build\game.exe -ID:C:\MinGW\include -LD:C:\MinGW\lib -mwindows -lmingw32 -lSDL2main -lSDL2_image -lSDL2" terminated with exit code: 1.

我试过移动参数。做 -mwindows,添加 -lmingw32。我仍然不断收到相同的错误。我能够修复 WinMain 错误。但我无法修复其他所有问题。

我运行编译的命令:

C:\MinGW\bin\g++.exe -g src\*.cpp -o build\game.exe -ID:C:\MinGW\include -LD:C:\MinGW\lib -mwindows -lSDL2main -lSDL2_image -lSDL2

如果我能得到任何帮助那就太棒了

MinGW 上神秘 undefined reference 错误的常见原因是使用 x32 编译器为 x64 编译的库,反之亦然。 SDL 提供 x32 和 x64 的,试试其他的。

I was able to fix the WinMain Error

请注意,修复 undefined reference to WinMain@16 的预期方法是 而不是 添加 #define SDL_MAIN_HANDLED 而不是 #undef main。一旦你获得了正确的库(见第一段),错误应该会自行消失。

确保您使用 int main(int, char**)(而不是 int main()void main()),否则将无法正常工作。

-ID:C:\MinGW\include -LD:C:\MinGW\lib

你不应该需要那些标志。将自动搜索这些目录。

由于您没有指定任何其他目录,我假设您将 SDL 文件直接放入编译器目录,IMO,这不是一个好的做法。

我假设 D:C: 打字错误?

-mwindows

此标志的唯一目的(据我所知)是防止您的应用自动为自己打开一个终端 window,用于发布版本。