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

Need help understanding C++ libraries, compiling, linking, header files for specific project

本文关键字:C++ 编译 链接 文件 项目 帮助 助理      更新时间:2023-10-16

这是我对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>

在研究了头文件includes之后,我得出结论,includes不带<>'s基本上只是包含头文件的相对路径,当它们被包装在<>'中时它们可以通过环境变量中指定的目录列表或命令行选项来查找文件。

所以我的第一个问题是,开发者使用有什么原因吗

#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。我通常只是困惑于我应该怎么做。如有任何帮助,我们将不胜感激。

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

有关详细信息,请参阅此堆栈溢出问题。如何编译用C编写的SDL程序示例?