无法运行SDL2项目,“无法执行”“:%1不是有效的Win32应用程序”

问题描述:

我试图教会自己如何在Qt Creator中使用SDL2,但不断进入这些“只让我编写代码”的情况。目前,我只是想打开一个窗口,上面有绿色的图片(做一个教程),但我得到这个错误:无法运行SDL2项目,“无法执行”“:%1不是有效的Win32应用程序”

Cannot execute "": %1 not a valid Win32-application 

我使用MinGW的5.3.0 32bit2因为编译器和I”已经设法运行没有这个错误的其他项目。我试着修改构建和运行配置,但没有任何运气。目前我(必需的)运行的配置是这样的:

Executable C:\...\sdl_test\debug\sdl_test.exe 
Working directory: C:\...\sdl_test 

也可对照,这里的main.cpp中:

#include <iostream> 
#include <stdio.h> 
#include <SDL2/SDL.h> 
#include <SDL2/SDL_image.h> 

using namespace std; 



int main() 
{ 
    bool quit = false; 
    SDL_Init(SDL_INIT_VIDEO); 
    SDL_Window* window = nullptr; 
    window = SDL_CreateWindow("MVP", 100, 100, 600, 400, 
           SDL_WINDOW_SHOWN); 

    if(window == nullptr){ 
     cout << "Window could not be created." << endl; 
     return 0; 
    } 

    SDL_Renderer* renderer = nullptr; 
    renderer = SDL_CreateRenderer(window, -1, 
            SDL_RENDERER_ACCELERATED); 
    SDL_Event* mainEvent = new SDL_Event(); 

    SDL_Texture* grass_image = NULL; 
    grass_image = IMG_LoadTexture(renderer, "grass.bmp"); 

    SDL_Rect grass_rect; 
    grass_rect.x = 10; 
    grass_rect.y = 50; 
    grass_rect.w = 250; 
    grass_rect.h = 250; 

    while(!quit && mainEvent->type != SDL_QUIT){ 
     SDL_PollEvent(mainEvent); 
     SDL_RenderClear(renderer); 

     SDL_RenderCopy(renderer, grass_image, NULL, &grass_rect); 

     SDL_RenderPresent(renderer); 
    } 
    SDL_DestroyWindow(window); 
    SDL_DestroyRenderer(renderer); 
    delete mainEvent; 

    return 0; 

} 

感到绝望,因为我只是想上打开一个窗口,一个绿色的矩形它......这是太多要问?!

编辑: 这是我的.pro文件

TEMPLATE = app 
CONFIG += console c++11 
CONFIG -= app_bundle 
CONFIG -= qt 
SOURCES += main.cpp 


win32: LIBS += -L$$PWD/../../../../SDL2-2.0.5/i686-w64-mingw32/lib/ -lmingw32 -lSDL2main -lSDL2 

INCLUDEPATH += $$PWD/../../../../SDL2-2.0.5/i686-w64-mingw32/include 
DEPENDPATH += $$PWD/../../../../SDL2-2.0.5/i686-w64-mingw32/include 

win32: LIBS += -L$$PWD/../../../../SDL2_image-2.0.1/i686-w64-mingw32/lib/ -lmingw32 -lSDL2_image 

INCLUDEPATH += $$PWD/../../../../SDL2_image-2.0.1/i686-w64-mingw32/include 
DEPENDPATH += $$PWD/../../../../SDL2_image-2.0.1/i686-w64-mingw32/include 

win32:QMAKE_LFLAGS += -shared 
+0

如果你'C双击,会发生什么:\ ... \ sdl_test \在资源管理器的调试\ sdl_test.exe'?如果从'cmd'运行'C:\ ... \ sdl_test \ debug \ sdl_test.exe',会发生什么情况? – Paul

+0

如果我双击sdl_test.exe:“此操作系统不支持此应用程序” 同样的事情,如果我尝试从cmd运行。我正在运行一个64位操作系统。 – Borjee

+0

只是一个疯狂的想法 - 你确定你正在使用的编译器生成Windows的二进制文件?也许这是一个Linux交叉编译器。如果你的'MinGW'中有'file'工具,你可以运行'file sdl_test.exe'并看看它会打印什么? – Paul

你呈现给我们的代码适用于Linux和任何理智的系统:)

有可能是你的问题的几个问题:

1 - 你想在32位系统

2运行64位应用程序 - 您的DLL的可能是腐败

3 - 您的SDL的DLL可以与Microsoft Visual Studio编译(你需要得到使用MinGW生成的dll)

也,你应该通过几个标志的编译器,因为你告诉我们,你是使用Qt Creator的,可能你有一个projectname.pro文件或的CMakeLists.txt

发现你所拥有的,并通过这些标志来编译:

轮候册,-subsystem,窗户

和链接到这些库

-lmingw32 -lSDL2main -lSDL2

+0

感谢您的答复! 1.我正在运行一个64位系统,它不应该能够处理32位? 2.我运行sfc/scannnow,它没有发现完整性违规行为 3.我不确定是否发生这种情况,所以我将.pro文件添加到原始文章中。我还为LIBS添加了-lmingw32标志 – Borjee