1

私の友人と私は私たちのソフトウェアをMacOSXに移植しています。このアプリケーションはSDLに基づいて構築されており、Qt5でSDLをリンクしてコンパイルするのに苦労しています。クロスプラットフォームを容易にするためにIDEを使用する以外は、コードでQtのどの部分も使用していません。

現在、SDLフレームワークが内部にあります/Library/Frameworks/

application.proの中に私は持っています:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp

macx {
   INCLUDEPATH += "/Library/Frameworks/SDL.framework/headers/"
}

main.cpp私は明らかに持っています、そして#include "SDL.h"私がctrlをクリックすると、SDL.hそれはフレームワークにリンクしていることを示しています...

ビルド/コンパイルに行くと、次のエラーが発生します。

14:21:24: Running steps for project BDGame...
14:21:24: Configuration unchanged, skipping qmake step.
14:21:24: Starting: "/usr/bin/make" -w
make: Entering directory `/Users/Kite/Dropbox/Wizardry Games/BDGame/BDGame-build-Desktop_Qt_5_0_0_clang_64bit_SDK-Release'
g++ -headerpad_max_install_names -mmacosx-version-min=10.6 -o BDGame main.o    
Undefined symbols for architecture x86_64:
  "_main", referenced from:
      start in crt1.10.6.o
     (maybe you meant: _SDL_main)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [BDGame] Error 1
make: Leaving directory `/Users/Kite/Dropbox/Wizardry Games/BDGame/BDGame-build-Desktop_Qt_5_0_0_clang_64bit_SDK-Release'
14:21:24: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project BDGame (kit: Desktop Qt 5.0.0 clang 64bit (SDK))
When executing step 'Make'

ここに画像の説明を入力してください

QtがSDLを使用できないようにするために、私は何を間違っていますか?

4

1 に答える 1

3

ファイルでは、の代わりに関数main.cppを宣言する必要があります。また、OS X用のSDLバンドルと一緒にファイルを入手して配布する必要があります。これら2つは、関数をさらに呼び出すCocoaアプリケーションをブートストラップするために必要です。int SDL_main(int, char**)main()SDLMain.hSDLMain.mSDL_main

Qtプロジェクト(* .pro)ファイルを使用していると思います。あなたはあなたの中にこのようなものを持っているべきです:

qtsdl.pro

QT-=コアGUI

TARGET = qtsdl
CONFIG+=コンソール
CONFIG-= app_bundle

テンプレート=アプリ

INCLUDEPATH + = /Library/Frameworks/SDL.framework/Headers
LIBS + = -framework Cocoa -framework SDL

ソース+=\
    main.cpp

OBJECTIVE_SOURCES + = \
    SDLMain.m

ヘッダー+=\
    SDLMain.h

main.cpp

#include <SDL.h>

int SDL_main(int argc, char *argv[])
{
    (void)argc;
    (void)argv;

    SDL_Surface *screen;

    if (SDL_Init(SDL_INIT_VIDEO) < 0)
        return 1;

    screen = SDL_SetVideoMode(640, 480, 32, SDL_OPENGL | SDL_HWSURFACE);
    if (!screen) {
        SDL_Quit();
        return 1;
    }

    SDL_Event event;
    bool running = true;

    while (running) {
        while (SDL_PollEvent(&event)) {
            switch (event.type) {
            case SDL_QUIT:
                running = false;
                break;
            case SDL_KEYDOWN:
                running = false;
                break;
            default:
                break;
            }
        }
    }

    SDL_Quit();
    return 0;
}

SDLMain.hSDLMain.mは、SDLフレームワークディストリビューションからそれらを取得します。

于 2012-12-26T22:53:18.240 に答える