提问人:okistuff 提问时间:10/17/2020 最后编辑:genpfaultokistuff 更新时间:4/21/2023 访问量:999
当 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
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.
我试图移动参数。做,添加 .我仍然不断收到相同的错误..我能够修复WinMain错误。但其他一切都我无法解决。-mwindows
-lmingw32
我正在运行的命令来编译:
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
答:
2赞
HolyBlackCat
10/17/2020
#1
MinGW 上出现神秘错误的常见原因是使用 x32 编译器为 x64 编译的库,反之亦然。SDL 同时提供 x32 和 x64 版本,请尝试其他版本。undefined reference
我能够修复WinMain错误
请注意,预期的修复方式不是添加和不做。一旦你得到了正确的库(见第一段),错误应该会自行消失。undefined reference to WinMain@16
#define SDL_MAIN_HANDLED
#undef main
请确保使用 (而不是 nor ),否则它将不起作用。int main(int, char**)
int main()
void main()
-ID:C:\MinGW\include -LD:C:\MinGW\lib
您不需要这些标志。将自动搜索这些目录。
由于您没有指定任何其他目录,因此我假设您将 SDL 文件直接放入编译器目录中,这不是一个好的做法,IMO。
我假设是错别字?D:C:
-mwindows
这个标志(据我所知)的唯一目的是防止你的应用程序自动为自己打开一个终端窗口,用于发布版本。
评论