'“SDL.h”编译时没有找到这样的文件或目录

时间:2012-05-07 20:37:05

标签: c++ linux sdl

这是我目前的Makefile:

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

我正确安装了libsdl,SDL.h位于/ usr / include / sdl所属的地方,但它不会编译。我的.h文件中也有#include "SDL.h"行,但仍然没有。

任何人都知道为什么?

6 个答案:

答案 0 :(得分:17)

如果标头文件为/usr/include/sdl/SDL.h且您的代码有:

#include "SDL.h"

您需要修复代码:

#include "sdl/SDL.h"

或告诉预处理器在哪里找到包含文件:

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

答案 1 :(得分:13)

对于Simple 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

答案 2 :(得分:6)

大部分时间SDL都在/usr/include/SDL。如果是,那么您的#include <SDL.h>指令是错误的,它应该是#include <SDL/SDL.h>

另一种方法是将/usr/include/SDL目录添加到include目录中。为此,您应该将-I/usr/include/SDL添加到编译器标志...

如果你使用的是IDE,这应该也很容易......

答案 3 :(得分:1)

头文件位于

/usr/include/SDL/SDL.h
在您的c ++代码中

使用

拉入此标题
#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

答案 4 :(得分:0)

有一个类似的案例,我不能使用StackAttack的解决方案,因为他指的是SDL2,这是我使用的太旧的代码。

幸运的是,我们来自askUbuntu的朋友也有类似的事情:

Download SDL

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

答案 5 :(得分:0)

最简单的想法是在编译代码时添加pkg-config --cflags --libs sdl2。

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

相关问题