2011-11-22 205 views
7

我一直在試圖讓一個超級簡單的SDL程序正常工作。我正在使用Mac OS X Lion。我有SDL在雪豹工作,但它似乎並不想在獅子工作。到目前爲止,我有這樣的:使用XCode 4在Mac OS X Lion上安裝SDL

#include <iostream> 
#include "SDL/SDL.h" 

using namespace std; 

/* 
#ifdef main 
# undef main 
#endif 
*/ 

int main(int argc, char* args[]) 
{ 
    SDL_Surface* hello = NULL; 
    SDL_Surface* screen = NULL; 
    SDL_Init(SDL_INIT_EVERYTHING); 
    screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); 
    hello = SDL_LoadBMP("hello.bmp"); 
    SDL_BlitSurface(hello, NULL, screen, NULL); 
    SDL_Flip(screen); 
    SDL_Delay(2000); 
    SDL_FreeSurface(hello); 
    SDL_Quit(); 

    return 0; 
} 

當我嘗試編譯此代碼(在Xcode 4.1),它給了我這個錯誤:

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 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

如果我取消註釋的#ifdef東西,我現在有評論說,該程序編譯,但隨後在SDL_SetVideoMode行上接收到SIGABRT。我剛剛在另一個程序中看到的那些評論內容,我不確定我是否應該擁有它。

我該如何得到這個工作?

+0

你能提供XCode發出的命令來編譯/鏈接程序嗎? (擺脫#ifdef的東西,BTW) –

+0

@BrettHale我不知道我怎麼會找到這個命令。它使用命令行應用程序模板與C++ Edit的默認值:認爲我找到了它:http://pastebin.com/zprm01Kp – Cole

回答

4

SDL頭文件用宏重新定義main。這是在SDL_main.h中:

#define main SDL_main 

但是這很好。 SDL提供自己的main()功能,然後調用您的版本。所以擺脫這些定義,他們正在變得更糟,而不是更好。

如果您的項目是基於可可的,那麼您可能錯過了在項目中包含SDLmain.m。這提供了一種可可友好的main()功能。如果您的項目是本地C++,那麼我的猜測是您沒有在項目中包含所有SDL庫,因此鏈接程序沒有看到SDL自己的main()

+0

我的項目是C++。我在SDL_main.h中看到#define行。你是什​​麼意思,我沒有核準所有的SDL庫? SDL。包括我在內的許多其他SDL頭文件,所以我應該有我需要的東西。我還能輸入什麼?雖然,我沒有在框架中看到任何.cpp文件。 – Cole

+0

SDL.h是一個頭文件,而不是一個庫。 SDL中的代碼存儲在庫或框架中(具體取決於您安裝SDL的方式)。您必須將庫或框架添加到項目中,以便鏈接器可以獲取SDL代碼。 – Miguel

+0

嗯,我想我是這麼做的。在Xcode的「構建階段」選項卡上,我在「鏈接二進制庫」部分中有SDL.framework。導入SDL.h只在我的main.cpp中。我應該在其他地方添加框架嗎? – Cole

1

SDL.h不包括SDL_main.h 在文件的第一行應該是:

#include SDL_main.h 

SDL_main重新定義了主要功能,然後就需要的自己的初始化是讓SDL與OS工作X

編譯時,你也需要在libSDLmain除了鏈接到libSDL

+0

這不會改變我的任何東西,但我不太瞭解鏈接libSDLmain。我正在使用一個框架(mac os 10.7),另外我的SDL.h包含了SDL_main.h。 – Cole

2

如果您使用的是SDL的框架,你只需將文件SDLMain.h和SDLMain.m添加到項目中(假設ÿ您已經將SDL.framework添加到您的項目中)。

您在SDL磁盤鏡像,您可以在這裏下載的「devel的 - 精簡版」文件夾中找到這些文件:http://www.libsdl.org/release/SDL-1.2.15.dmg

這兩個文件會給你一個可可友好的主程序,讓您的SDL應用可以是一個行爲良好的OS X應用程序。