Skip to content
Advertisement

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

This is my first stab at C++, also I know that the question is broad but I have a specific example that I’m working with so hopefully that will narrow everything down a bit.

I’m basically attempting to compile a C++ game manually in Linux (Ubuntu 14.04). The source code I am attempting to compile is located in this directory: https://github.com/akadmc/SmashBattle/tree/master/battle.

I’m CD’ing into the battle directory and, perhaps naively running

gcc *.cpp

I started seeing multiple issues as such:

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

and

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

After researching header file includes I concluded that includes without <>’s are basically just relative paths to include a header file, and that when they are wrapped in <>’s they can either lookup the file through a listing of directories specified in an enviornment variable, or a command line option.

So my first question is, is there any reason the developer used

#include "SDL/SDL.h

AND

#include <SDL/SDL.h>

in different files? There was no SDL directory in the source code…

After realizing that SDL was missing from the source code / environment in one way or another I did tinkering. I was pretty confused (and still am) because I downloaded the SDL source files, didn’t see any header files, ended up building a version of SDL by using cmake, and then build. I realized afterwards that I just made a local executable and didn’t yield any header files. Then I realized that I just needed the development library, downloaded that, and put higher in the directory tree and then included it at compile with

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

Afterwards, the previous header file errors went away – but I started getting errors like the following:

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'

And so on. Am I generally headed in the right path or do I have some misunderstanding about compiling, including development libraries, etc? Also I’ve read the the order of the compilation matters, and I’m not using any order + the developer didn’t put a makefile in the source code or anything. I’m generally just confused as to how I should be doing this. Any help would be greatly appreciated.

Advertisement

Answer

Yes, you are on the right track. However, now you need to have a linkage to the SDL libraries. The -I just includes an extra library path but you have to actually link your assembly to the SDL files.

See this stack overflow question for more information. How to compile an example SDL program written in C?

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement