需要帮助了解C ++库,编译,链接,特定项目的头文件

时间:2015-12-08 02:35:23

标签: c++ linux

这是我对C ++的第一次尝试,我也知道问题很广泛,但我有一个具体的例子,我正在努力,所以希望能缩小一切。

我基本上是在Linux(Ubuntu 14.04)中手动编译C ++游戏。我试图编译的源代码位于以下目录中:https://github.com/akadmc/SmashBattle/tree/master/battle

我正在进入战斗目录,也许是天真地运行

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>

在研究了头文件包含之后,我得出结论,包含没有&lt;&gt;的基本上只是包含头文件的相对路径,并且当它们被包装在&lt;&gt;中时,它们可以通过查找文件在enviornment变量或命令行选项中指定的目录列表。

所以我的第一个问题是,开发人员是否有任何理由使用

#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。我一般都对如何做到这一点感到困惑。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

是的,你走在正确的轨道上。但是,现在您需要与SDL库建立链接。 -I只包含一个额外的库路径,但您必须实际将程序集链接到SDL文件。

有关详细信息,请参阅此堆栈溢出问题。 How to compile an example SDL program written in C?