Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mingw-w64和SDL2链接问题 我尝试遵循SDL教程并编译一个使用SDL的C++文件。我使用的是windows 10,最初使用的是MinGW_C++_Sdl_Mingw W64 - Fatal编程技术网

mingw-w64和SDL2链接问题 我尝试遵循SDL教程并编译一个使用SDL的C++文件。我使用的是windows 10,最初使用的是MinGW

mingw-w64和SDL2链接问题 我尝试遵循SDL教程并编译一个使用SDL的C++文件。我使用的是windows 10,最初使用的是MinGW,c++,sdl,mingw-w64,C++,Sdl,Mingw W64,过了一段时间,我意识到我的MinGW安装出现了与SDL无关的问题,所以我改为使用MinGW-w64,这解决了非SDL的问题,但现在当我尝试用SDL编译任何东西时,都找不到lSDL2或lSDL2main。但是,它会跳过各种文件,说它们不兼容 我怀疑这可能是32位/64位不兼容,但我不确定这是如何发生的,因为即使我明确确保使用32位g++编译器,问题仍然存在。作为参考,我在命令提示符中输入的命令是 x86_64-w64-mingw32-g++ 04_key_presses.cpp

过了一段时间,我意识到我的MinGW安装出现了与SDL无关的问题,所以我改为使用MinGW-w64,这解决了非SDL的问题,但现在当我尝试用SDL编译任何东西时,都找不到lSDL2或lSDL2main。但是,它会跳过各种文件,说它们不兼容

我怀疑这可能是32位/64位不兼容,但我不确定这是如何发生的,因为即使我明确确保使用32位g++编译器,问题仍然存在。作为参考,我在命令提示符中输入的命令是

 x86_64-w64-mingw32-g++  04_key_presses.cpp                 
-IC:\mingw_dev_lib\include\SDL2 -LC:\mingw_dev_lib\lib -w                    
-Wl,subsystem,windows -lmingw32 -lSDL2main -lSDL2 -o key_presses
错误消息如下所示

C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\mingw_dev_lib\lib/libSDL2main.a when searching for -lSDL2main
C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\mingw_dev_lib\lib\libSDL2main.a when searching for -lSDL2main
C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\mingw_dev_lib\lib/libSDL2main.a when searching for -lSDL2main
C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2main
C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\mingw_dev_lib\lib/libSDL2.dll.a when searching for -lSDL2
C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\mingw_dev_lib\lib/libSDL2.a when searching for -lSDL2
C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\mingw_dev_lib\lib\libSDL2.a when searching for -lSDL2
C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\mingw_dev_lib\lib/libSDL2.dll.a when searching for -lSDL2
C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible C:\mingw_dev_lib\lib/libSDL2.a when searching for -lSDL2
C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lSDL2
collect2.exe: error: ld returned 1 exit status 

您的编译器是
x86\u 64-w64-mingw32-g++
。这就是64位编译器。 32位编译器是
i686-w64-mingw32-g++.exe
。64位链接 您正在尝试使用的:

x86_64-w64-mingw32-g++  04_key_presses.cpp \                
-IC:\mingw_dev_lib\include\SDL2 -LC:\mingw_dev_lib\lib -w \                   
-Wl,subsystem,windows -lmingw32 -lSDL2main -lSDL2 -o key_presses
跳过不兼容的32位SDL2库

64位编译器可以构建64位或32位目标,构建 默认为64位。要以32位为目标,请传递两个编译的
-m32
和联系。使用一个命令执行这两项操作时,只需传递一次:

x86_64-w64-mingw32-g++  04_key_presses.cpp -m32 \                
-IC:\mingw_dev_lib\include\SDL2 -LC:\mingw_dev_lib\lib -w \                   
-Wl,subsystem,windows -lmingw32 -lSDL2main -lSDL2 -o key_presses

在不使用visual studio的情况下为windows编译是件痛苦的事情。我强烈建议使用cmake为所有平台生成构建系统,然后在windows上使用VS。如果我添加-m32,那么我会收到更多错误消息,说它跳过了不兼容的内容,没有找到它们,但它们不再是SDL内容@好的,在这种情况下,您试图链接32位和64位库的组合,这是行不通的。我想您现在缺少的是工具链的32位库。在64位系统上,我建议您获得并使用64位SDL2库,除非您特别需要以32位为目标。@JonG我刚刚检查了您的链接。是的,您没有用于工具链的32位库。默认情况下它们在链接中。你说的“默认情况下它们在链接中”是什么意思?好的,我刚刚切换到64位的所有内容,它似乎可以工作,谢谢!