这是我目前的Makefile:
CFLAGS = -O2 -Wall -pedantic -std=gnu++11 `sdl-config --cflags --libs` -lSDL_mixer
我正确安装了libsdl,SDL.h位于/ usr / include / sdl所属的地方,但它不会编译。我的.h文件中也有#include "SDL.h"
行,但仍然没有。
任何人都知道为什么?
答案 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的朋友也有类似的事情:
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`