2017-04-05 18 views
0

Qt CreatorでSDL2を使用する方法を教えていますが、状況。現在、私は(チュートリアルをやって)その上に緑の絵でウィンドウを開くしようとしているが、私はこのエラーを取得:SDL2プロジェクトを実行できません "実行できません" "%1有効なWin32アプリケーションではありません"

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

私はコンパイラとしてmingwの5.3.0 32bit2を使用していると私は」このエラーがなくても他のプロジェクトを実行することができました。私はBuild and Runの設定を試してみましたが、運がなかった。現在、私の(基本的な)実行コンフィギュレーションは次のようになります。私はちょうど上の緑の四角でウィンドウを開くために、

#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; 

} 

絶望的な感じ:

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

はまた参考のために、ここでmain.cppにはですそれは...あまりにも多くの質問ですか?

EDIT:ここ はあなたが私たちに見せているコードはLinuxとまともなシステムのために働く私の.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ビットOSを実行しています。 – Borjee

+0

ちょっとクレイジーなアイデア - 使用しているコンパイラがWindows用のバイナリを生成していることを確認してください。たぶんそれはLinuxのクロスコンパイラです。あなたが 'MinGW'に' file'ユーティリティーを持っていれば、 'file sdl_test.exe'を実行して、それが何を印刷するか見てみることができますか? – Paul

答えて

0

だ:)

あなたの問題のために、いくつかの問題が考えられます:

1 - あなたは

2 32ビットシステムで64ビットアプリケーションを実行しようとしている - あなたのdllのが壊れている可能性があります

3 - あなたのSDLのDLLのは、MicrosoftのVisual Studioを使用してコンパイルすることができた(とあなたはMinGWので生成されたDLLのを取得する必要があります)

あなたがしていることを私たちに語ったことからも、あなたは、コンパイラにいくつかのフラグを渡す必要がありますQtの創造主を使用して、おそらくあなたはprojectname.proファイルまたはCMakeLists.txt

はあなたが持っているものを発見し、コンパイラにそれらのフラグを渡す必要があり:

-Wl、-subsystem、窓

とそれらのライブラリとのリンク

-lmingw32 -lSDL2main -lSDL2

+0

返信ありがとう! 1. 64ビットシステムを実行していますが、32ビットを処理できないはずですか? 2. sfc/scannnowを実行しましたが、完全性の違反がなくなりました。 3.これが起きているかどうかはわかりません。元の投稿に.proファイルを追加しました。また、両方のLIBSに-lmingw32フラグを追加しました – Borjee

関連する問題