Voici un extrait de mon Makefile actuel:
CFLAGS = -O2 -Wall -pedantic -std=gnu++11 `sdl-config --cflags --libs` -lSDL_mixer
J'ai correctement installé libsdl, SDL.h se trouve dans/usr/include/sdl à laquelle il appartient, mais il ne compilera tout simplement pas. J'ai aussi la ligne #include "SDL.h"
dans mes fichiers .h, mais toujours pas.
Quelqu'un sait pourquoi?
Si le fichier d'en-tête est /usr/include/sdl/SDL.h
et que votre code a:
#include "SDL.h"
Vous devez soit corriger votre code:
#include "sdl/SDL.h"
Ou indiquez au préprocesseur où trouver les fichiers d'inclusion:
CFLAGS = ... -I/usr/include/sdl ...
Pour Simple Direct Media Layer 2 (SDL2), après l'avoir installé sur Ubuntu 16.04 via:
Sudo apt-get install libsdl2-dev
J'ai utilisé l'en-tête:
#include <SDL2/SDL.h>
et la commande du compilateur:
-lSDL2main -lSDL2
De plus, vous voudrez peut-être aussi installer:
apt-get install libsdl2-image-dev
apt-get install libsdl2-mixer-dev
apt-get install libsdl2-ttf-dev
Avec ces en-têtes:
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
#include <SDL2/SDL_mixer.h>
et les commandes du compilateur:
-lSDL2_image
-lSDL2_ttf
-lSDL2_mixer
La plupart du temps, SDL est dans /usr/include/SDL
. Si tel est le cas, votre directive #include <SDL.h>
est erronée, elle devrait être #include <SDL/SDL.h>
.
Une alternative pour cela consiste à ajouter le répertoire /usr/include/SDL
à vos répertoires d'inclusion. Pour ce faire, vous devez ajouter -I/usr/include/SDL
aux drapeaux du compilateur ...
Si vous utilisez un IDE, cela devrait être assez facile aussi ...
Le fichier d'en-tête vit à
/usr/include/SDL/SDL.h
dans votre code c ++, tirez dans cet en-tête en utilisant
#include <SDL.h>
vous avez l'usage correct de
`sdl-config --cflags --libs`
qui te donnera
-I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT
-L/usr/lib/x86_64-linux-gnu -lSDL
au moment où vous pouvez également voir cette utilisation qui fonctionne pour une installation standard
`pkg-config --cflags --libs sdl`
qui vous fournit
-D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -lSDL
Ayant un cas similaire et je ne pouvais pas utiliser StackAttack s solution car il fait référence à SDL2, qui est pour le code hérité que j'utilise trop nouveau.
Heureusement, nos amis de askUbuntu avaient quelque chose de similaire:
tar xvf SDL-1.2.tar.gz
cd SDL-1.2
./configure
make
Sudo make install