2012-12-26 65 views
1

我和我的朋友正在將我們的軟件移植到Mac OSX上。該應用程序嚴重構建在SDL上,我們很難在Qt5中將SDL鏈接和編譯。我們沒有在我們的代碼中使用Qt的任何部分,除此之外,使用IDE進行跨平臺緩解。在Mac OSX上的Qt Creator中使用SDL

目前,我有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' 

enter image description here

我在做什麼不正確的是從使用SDL停止Qt的?

+0

看起來您的SDL庫在框架中沒有64位版本,並且您正在構建64位版本。在繼續之前做一次清理並確保在MacOS下重建所有對象文件/庫。你應該能夠構建32位,如果你添加「CONFIG - = x86_64」和「CONFIG + = x86」到你的pro文件。 – koan

+0

我試過這個,但是這似乎沒有改變任何東西。 –

+0

您顯然正試圖鏈接到Intel 64位體系結構,這就是爲什麼您會收到「ld:symbol(s)not found for architecture x86_64」的原因。我不使用創建者,但是您在屏幕上選擇了64位clang的32位PPC架構。你的編譯器應該是「Clang(x86 64bit)」或者「GCC(x86 64bit)」 – koan

回答

3

在您的main.cpp文件中,您必須聲明int SDL_main(int, char**)函數而不是main()。您還需要獲得SDLMain.hSDLMain.m文件以及用於OS X的SDL捆綁軟件。這兩個文件用於引導您的Cocoa應用程序,以便進一步調用SDL_main函數。

我想你使用Qt項目(* .pro)文件。你應該在你的是這樣的:

qtsdl.pro

 
QT  -= core gui 

TARGET = qtsdl 
CONFIG += console 
CONFIG -= app_bundle 

TEMPLATE = app 

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

SOURCES += \ 
    main.cpp 

OBJECTIVE_SOURCES += \ 
    SDLMain.m 

HEADERS += \ 
    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框架分發。

+0

這似乎產生了一個新問題; ':-1:錯誤:沒有規則可以使SDLMain.o所需的目標SDLMain.m成爲可能。 Stop.'不幸的是我不明白這一點。 –

+0

您是否已將SDLMain.h和SDLMain.m文件複製到您的項目中?您可以在用於安裝SDL框架的SDL-xxx.dmg存檔的devel-lite文件夾中找到這些文件。 – Archie

+0

是的。我做了,似乎幫助我猜。但你會喜歡接下來發生的事情。 http://i47.tinypic.com/2rm7d4n.png –