Подтвердить что ты не робот

"SDL.h" не обнаружен такой файл или каталог "при компиляции

Вот часть моего текущего Makefile:

CFLAGS = -O2 -Wall -pedantic -std=gnu++11 `sdl-config --cflags --libs` -lSDL_mixer

У меня установлен libsdl правильно, SDL.h находится в /usr/include/sdl, где он принадлежит, но он просто не будет компилироваться. У меня также есть строка #include "SDL.h" в моих .h файлах, но все равно нет.

Кто-нибудь знает, почему?

4b9b3361

Ответ 1

Если файл заголовка /usr/include/sdl/SDL.h и ваш код имеет:

#include "SDL.h"

Вам нужно либо исправить свой код:

#include "sdl/SDL.h"

Или сообщите препроцессору, где найти файлы include:

CFLAGS = ... -I/usr/include/sdl ...

Ответ 2

Для Простой 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

Ответ 3

В большинстве случаев SDL находится в /usr/include/SDL. Если это так, то ваша директива #include <SDL.h> ошибочна, она должна быть #include <SDL/SDL.h>.

Альтернативой для этого является добавление каталога /usr/include/SDL в ваши каталоги include. Для этого вы должны добавить -I/usr/include/SDL к флагам компилятора...

Если вы используете IDE, это тоже должно быть очень легко...

Ответ 4

Файл заголовка находится в

/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

Ответ 5

У меня был похожий случай, и я не смог использовать решение StackAttack, так как он ссылается на SDL2, который относится к устаревшему коду, который я использую слишком новым.

К счастью, у наших друзей из askUbuntu было что-то похожее:

Скачать SDL

tar xvf SDL-1.2.tar.gz
cd SDL-1.2
./configure
make
sudo make install

Ответ 6

самая простая идея - добавить pkg-config --cflags --libs sdl2 во время компиляции кода.

g++ file.cpp 'pkg-config --cflags --libs sdl2'