Ответ 1
Если файл заголовка /usr/include/sdl/SDL.h
и ваш код имеет:
#include "SDL.h"
Вам нужно либо исправить свой код:
#include "sdl/SDL.h"
Или сообщите препроцессору, где найти файлы include:
CFLAGS = ... -I/usr/include/sdl ...
Вот часть моего текущего Makefile:
CFLAGS = -O2 -Wall -pedantic -std=gnu++11 `sdl-config --cflags --libs` -lSDL_mixer
У меня установлен libsdl правильно, SDL.h находится в /usr/include/sdl, где он принадлежит, но он просто не будет компилироваться. У меня также есть строка #include "SDL.h"
в моих .h файлах, но все равно нет.
Кто-нибудь знает, почему?
Если файл заголовка /usr/include/sdl/SDL.h
и ваш код имеет:
#include "SDL.h"
Вам нужно либо исправить свой код:
#include "sdl/SDL.h"
Или сообщите препроцессору, где найти файлы include:
CFLAGS = ... -I/usr/include/sdl ...
Для Простой Direct Media Layer 2 (SDL2) после установки на Ubuntu 16.04 через:
sudo apt-get install libsdl2-dev
Я использовал заголовок:
#include <SDL2/SDL.h>
и команда компоновщика компилятора:
-lSDL2main -lSDL2
Кроме того, вы также можете установить:
apt-get install libsdl2-image-dev
apt-get install libsdl2-mixer-dev
apt-get install libsdl2-ttf-dev
С этими заголовками:
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
#include <SDL2/SDL_mixer.h>
и команды компоновщика компилятора:
-lSDL2_image
-lSDL2_ttf
-lSDL2_mixer
В большинстве случаев SDL находится в /usr/include/SDL
. Если это так, то ваша директива #include <SDL.h>
ошибочна, она должна быть #include <SDL/SDL.h>
.
Альтернативой для этого является добавление каталога /usr/include/SDL
в ваши каталоги include. Для этого вы должны добавить -I/usr/include/SDL
к флагам компилятора...
Если вы используете IDE, это тоже должно быть очень легко...
Файл заголовка находится в
/usr/include/SDL/SDL.h
в вашем коде С++ в этом заголовке используйте
#include <SDL.h>
у вас есть правильное использование
`sdl-config --cflags --libs`
который даст вам
-I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT
-L/usr/lib/x86_64-linux-gnu -lSDL
вы также можете увидеть это использование, которое работает для стандартной установки
`pkg-config --cflags --libs sdl`
который поставляет вам
-D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -lSDL
У меня был похожий случай, и я не смог использовать решение StackAttack, так как он ссылается на SDL2, который относится к устаревшему коду, который я использую слишком новым.
К счастью, у наших друзей из askUbuntu было что-то похожее:
tar xvf SDL-1.2.tar.gz
cd SDL-1.2
./configure
make
sudo make install
самая простая идея - добавить pkg-config --cflags --libs sdl2 во время компиляции кода.
g++ file.cpp 'pkg-config --cflags --libs sdl2'