这是我当前 Makefile 的一部分:
CFLAGS = -O2 -Wall -pedantic -std=gnu++11 `sdl-config --cflags --libs` -lSDL_mixer
我已经正确安装了 libsdl,SDL.h 在它所属的 /usr/include/sdl 中,但它不会编译。我的 .h 文件中也有该行#include "SDL.h"
,但仍然不行。
有谁知道为什么?
对于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
如果头文件是/usr/include/sdl/SDL.h
并且您的代码具有:
#include "SDL.h"
您需要修复您的代码:
#include "sdl/SDL.h"
或者告诉预处理器在哪里可以找到包含文件:
CFLAGS = ... -I/usr/include/sdl ...
大多数时候 SDL 在/usr/include/SDL
. 如果是这样,那么您的#include <SDL.h>
指令是错误的,它应该是#include <SDL/SDL.h>
.
另一种方法是将/usr/include/SDL
目录添加到包含目录中。为此,您应该添加-I/usr/include/SDL
到编译器标志...
如果您使用的是 IDE,这也应该很容易......
头文件位于
/usr/include/SDL/SDL.h
__OR__
/usr/include/SDL2/SDL.h # for SDL2
在您的 C++ 代码中使用
#include <SDL.h>
__OR__
#include <SDL2/SDL.h> // for SDL2
你有正确的用法
sdl-config --cflags --libs
__OR__
sdl2-config --cflags --libs # sdl2
这会给你
-I/usr/include/SDL -D_GNU_SOURCE=1 -D_REENTRANT
-L/usr/lib/x86_64-linux-gnu -lSDL
__OR__
-I/usr/include/SDL2 -D_REENTRANT
-lSDL2
有时您可能还会看到这种适用于标准安装的用法
pkg-config --cflags --libs sdl
__OR__
pkg-config --cflags --libs sdl2 # sdl2
它为您提供
-D_GNU_SOURCE=1 -D_REENTRANT -I/usr/include/SDL -lSDL
__OR__
-D_REENTRANT -I/usr/include/SDL2 -lSDL2 # SDL2
最简单的想法是在编译代码时添加 pkg-config --cflags --libs sdl2。
g++ file.cpp `pkg-config --cflags --libs sdl2`
有一个类似的情况,我不能使用StackAttack的解决方案,因为他指的是 SDL2,这是我使用的旧代码太新。
幸运的是,我们来自askUbuntu的朋友也有类似的情况:
tar xvf SDL-1.2.tar.gz
cd SDL-1.2
./configure
make
sudo make install