【发布时间】:2015-12-08 02:35:22
【问题描述】:
这是我对 C++ 的第一次尝试,我也知道这个问题很广泛,但我有一个我正在使用的具体示例,因此希望能够缩小所有范围。
我基本上是在尝试在 Linux (Ubuntu 14.04) 中手动编译 C++ 游戏。我正在尝试编译的源代码位于此目录中:https://github.com/akadmc/SmashBattle/tree/master/battle。
我正在 CD 进入战斗目录,也许天真地运行
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>
在研究了头文件包含后,我得出结论,没有的包含基本上只是包含头文件的相对路径,当它们被包裹在中时,他们可以通过目录列表查找文件在环境变量或命令行选项中指定。
所以我的第一个问题是,开发人员有什么理由使用
#include "SDL/SDL.h
与
#include <SDL/SDL.h>
在不同的文件中?源码中没有SDL目录...
在意识到源代码/环境中以某种方式缺少 SDL 后,我进行了修补。我很困惑(现在仍然如此),因为我下载了 SDL 源文件,没有看到任何头文件,最终使用 cmake 构建了一个 SDL 版本,然后构建。后来我意识到我只是制作了一个本地可执行文件并且没有产生任何头文件。然后我意识到我只需要开发库,下载它,并将其放在目录树的更高位置,然后将其包含在 compile with
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。您需要指定库路径、要链接的库、标头路径等。
-
您可能想先阅读有关
configure脚本en.wikipedia.org/wiki/Configure_script 的内容,然后在您的源代码副本中找到一个文件。