2015-12-08 105 views
0

這是我第一次刺C++,我也知道這個問題很廣泛,但我有一個具體的例子,我希望這將是縮小一切。需要幫助瞭解C++庫,編譯,鏈接,特定項目的頭文件

我基本上試圖在Linux(Ubuntu 14.04)中手動編譯C++遊戲。我正在嘗試編譯的源代碼位於以下目錄中:https://github.com/akadmc/SmashBattle/tree/master/battle

我CD'ing進入戰鬥目錄,也許天真地運行

gcc *.cpp 

我開始看到多個問題,因爲這樣:

compilation terminated.HealthPowerUp.cpp:1:21: 
fatal error: SDL/SDL.h: No such file or directory #include "SDL/SDL.h" 

compilation terminated.LaserBeamPowerUp.cpp:1:21: 
fatal error: SDL/SDL.h: No such file or directory #include <SDL/SDL.h> 

後研究頭文件包括我的結論是,包括沒有<>的基本上只是重新包含頭文件的lative路徑,當它們被包裝在<>中時,它們可以通過環境變量中指定的目錄列表或命令行選項來查找文件。

所以我的第一個問題是,沒有任何理由開發者所使用

#include "SDL/SDL.h 

#include <SDL/SDL.h> 
在不同的文件

?源代碼中沒有SDL目錄...

在意識到SDL從源代碼/環境中以某種方式丟失後,我做了修補程序。我非常困惑(現在仍然是),因爲我下載了SDL源文件,沒有看到任何頭文件,最終通過使用cmake構建了一個SDL版本,然後構建。後來我意識到我只是製作了一個本地可執行文件,並沒有生成任何頭文件。然後,我意識到,我只是需要的開發庫,下載的,並在目錄樹提出了更高,然後包括它在與

c++ *.cpp -I $HOME/Desktop/smashProject/source/ 

編譯之後,以前的頭文件中的錯誤走了 - 但我開始越來越錯誤如下所示:

Text.cpp:(.text+0x17): undefined reference to `SDL_RWFromFile' 
Text.cpp:(.text+0x24): undefined reference to `SDL_LoadBMP_RW' 
Text.cpp:(.text+0x34): undefined reference to `SDL_DisplayFormat' 

依此類推。我通常是走在正確的道路上還是對編譯有誤解?包括開發庫等?另外我已經閱讀了編譯問題的順序,並且我沒有使用任何命令+開發人員沒有將makefile放在源代碼或任何東西中。我通常對我應該如何做這件事感到困惑。任何幫助將不勝感激。

+0

聽起來很複雜的方式。我會尋找一個簡單的「hello world」類型的例子。有可能是你應該使用的makefile。您需要指定庫路徑,鏈接庫,標題路徑等。 – John3136

+0

您可能想先閱讀'configure'腳本https://en.wikipedia.org/wiki/Configure_script,然後在您的源代碼副本中找到一個文件。 – codekiddy

回答

0

是的,你在正確的軌道上。但是,現在您需要與SDL庫鏈接。 -I只包含一個額外的庫路徑,但您必須將您的程序集實際鏈接到SDL文件。

看到這個堆棧溢出問題的更多信息。 How to compile an example SDL program written in C?

+0

感謝您的回覆。你能想到爲什麼#include 和#include「SDL/SDL.h」之間會有變化嗎? –

+0

包含SDL的適當方式可能是「SDL/SDL.h」,並且假定您有一個文件夾SDL,其中的所有標題與您的項目位於同一目錄中。 – lukevp

+0

<>語法通常用於標準庫包含。有關更多信息,請參閱以下內容:http://stackoverflow.com/questions/21593/what-is-the-difference-between-include-filename-and-include-filename – lukevp