這是我第一次刺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放在源代碼或任何東西中。我通常對我應該如何做這件事感到困惑。任何幫助將不勝感激。
聽起來很複雜的方式。我會尋找一個簡單的「hello world」類型的例子。有可能是你應該使用的makefile。您需要指定庫路徑,鏈接庫,標題路徑等。 – John3136
您可能想先閱讀'configure'腳本https://en.wikipedia.org/wiki/Configure_script,然後在您的源代碼副本中找到一個文件。 – codekiddy