2012-07-19 66 views
1

我今天早上安裝了OSX Lion和Xcode,學習C++後,使用了一段時間的Sublime Text和Terminal來使用SDL,但是在嘗試編譯終端時遇到了一些問題,這是我的代碼。SDL鏈接錯誤與OSX上的終端/ g ++ lion

#include "SDL/SDL.h" 

int main(int argc, char* args[]) 
{ 
    //Start SDL 
    SDL_Init(SDL_INIT_EVERYTHING); 

    //Quit SDL 
    SDL_Quit(); 

    return 0; 
} 

我把SDL.framework,SDL_mixer.framework和devel的 - 精簡版到我的庫文件夾,然後用MacPorts的獲得SDL時沒有工作,後者並沒有幫助。

當我使用'g ++ sdltest.cpp -o sdltest -lSDL'時,我得到以下結果 - 'ld:library找不到-lSDLcollect2:ld返回1退出狀態'。有什麼辦法可以讓這個工作?另外,出於興趣,如果我在格式化硬盤並重新安裝OSX Lion和XCode(我正在考慮快速完成)之後做SDL的「全新安裝」,那麼最佳方式是什麼?去做吧?我遇到了所有我發現的指南中的錯誤(這對我來說肯定是一個問題,我只需要找到最容易理解的一個),並且它們中的很多似乎都是使用Xcode而不是文本編輯器和終端。謝謝。

+0

當您設置MacPorts的環境,你改變你的INCLUDE和LIB環境變量。另外爲什麼不使用Xcode,因爲它允許更容易的調試/編輯等 – Mark 2012-07-19 23:15:16

+0

我不認爲我做過,我必須嗎?我玩弄了使用Xcode的想法,但我真的很喜歡使用Sublime Text,並認爲使用Terminal的挑戰會是一個很好的學習體驗 - 但它證明是有問題的。如果我無法解決這個問題,那麼我可能會嘗試使用Xcode。 – snarehanger 2012-07-19 23:20:43

回答

0

你告訴g ++使用-lSDL鏈接libSDL,但是你不會告訴它在哪裏看。 通過-L/Users/snarehanger/Library/SDL或其他方式將SDL路徑添加到您的命令行。


對不起,我沒有意識到這並不清楚,所以我將Joachim的評論納入答案。

  • 命令行選項區分大小寫
  • 選項-l(小寫ELL)給出了一個庫的名稱:它不指定任何文件名或搜索路徑
    • 例如,-lSDL可以匹配libSDL.alibSDL.so,在命令行中指定的搜索路徑中的任意位置或者編譯爲gcc的默認值。
    • gcc manual: link options
  • 選項-L(大寫ELL)增加了一個目錄以發現具有-l
    • 完整的命令行g++ sdltest.cpp -o sdltest -L/opt/local/lib -lSDL請求的庫時使用的搜索路徑將允許克++找到/opt/local/lib/libSDL.so如果它存在,例如
    • gcc manual: directory options
+1

那麼,如果使用Macports -L/opt/local/lib – Mark 2012-07-19 23:22:57

+0

g ++ sdltest.cpp -o sdltest -l/cd/library/frameworks/sdl.framework/SDL 我試過了,它的變體和我已經試過Marks的建議,我只是不斷收到它找不到的錯誤。我應該嘗試再次安裝SDL嗎? – snarehanger 2012-07-19 23:40:04

+1

@snarehanger注意'-l'和'-L'之間的區別:後者使用大寫字母L,而前者不使用。 '-l'告訴鏈接器_what_庫鏈接,'-L'_where_可以找到它們。您必須使用_both_,例如'g ++ sdltest.cpp -o sdltest -L/opt/local/lib -lSDL'。 – 2012-07-20 06:40:45

2

應使用包括SDL-配置(或SDL2-配置爲SDL2)文件來生成你包含和庫參數到g ++。例如,因爲我通過自制的OSX使用SDL2,這樣的:

g++ sdltest.cpp -o sdltest `sdl2-config --cflags` `sdl2-config --lib` 

轉換成並運行:

g++ sdltest.cpp -o sdltest -I/usr/local/include/SDL2 -D_THREAD_SAFE -L/usr/local/lib -lSDL2 

應工作同樣爲SDL 1。X與SDL-配置,並有另外一個「--static - 庫」選項,即對礦井給出:

-L/usr/local/lib -lSDL2 -lm -liconv -Wl,-framework,OpenGL -Wl,-framework,ForceFeedback -lobjc -Wl,-framework,Cocoa -Wl,-framework,Carbon -Wl,-framework,IOKit -Wl,-framework,CoreAudio -Wl,-framework,AudioToolbox -Wl,-framework,AudioUnit