2013-12-12 202 views
0

我正在學習C++,我從命令行編譯。當試圖添加第三方庫時,我遇到了一個問題。我無法找出鏈接器系統。有誰知道一個很好的教程或類似的東西?gnu從命令行編譯

例如,我想玩SDL2庫,並使用像這樣的命令。

c++ -I/Library/Frameworks/SDL2.framework/Headers -L/Library/Frameworks/SDL2.framework/ -lSDL2 helloworld.cpp 

,我得到的錯誤LD:庫找不到-lSDL2

+0

[Linker order -GCC](http://stackoverflow.com/questions/45135/linker-order-gcc) –

+0

的可能重複不確定它是否重複,因爲這不是報告的問題,除非你從示例中可以看出,這實際上是問題,如果是這樣,您可以通過指出來幫助用戶,然後也許他們可以刪除他們的問題。 – mydoghasworms

+0

他的問題是特定於多個鏈接庫的順序,只是試圖使用一個庫。 – citizen2191629

回答

0

我找到了答案。以下命令正確編譯。包含聲明必須更改爲...

#include<SDL2/SDL.h> 
and the correct compile command is... 
c++ -o helloworld helloWorld.cpp -framework SDL2 

我也可以使用g ++。在我的系統上,C++和g ++都是同一個gnu編譯器的符號鏈接,它恰好是我在系統上安裝的最新版本。

選項-L是unix鏈接器選項,不適用於MAC。 GCC的開發人員非常友好,能夠以框架形式包含MAC特定的鏈接器選項。這些服務將遵循MAC如何以及他們喜歡存儲圖書館的傳統。你可以用逗號分隔幾個框架。因此,例如,我可以做也只要-framework SDL2,SDL2_mixer作爲源具有

#include<SDL2_mixer/SDL_mixer.h> 

當編譯圖書館這個默認的搜索位置/庫/框架。 include語句是跨平臺compatable和MAC GNU鏈接都知道,如果我說

#include<SDL2/SDL.h> 

是該頭將在/Library/Frameworks/SDL2.framework/Headers

的-ipath選項仍然發現在mac上工作,並可用於傳遞標題和源文件的替代搜索位置,就像它在unix中工作一樣。

1

你需要把最後上線的鏈接標誌:

g++ -I/Library/Frameworks/SDL2.framework/Headers helloworld.cpp -L/Library/Frameworks/SDL2.framework/ -lSDL2