SDL_ttf找不到"SDL.h",但主要的.cpp可以
SDL_ttf cannot find "SDL.h", but main.cpp can
我正在编写一个make文件来编译一个非常简单的SDL2程序。
到目前为止,它编译SDL2很好,现在我正在努力编译扩展框架SDL2_image和SDL_ttf。
似乎 MAKE 正确地找到了 SDL_ttf.h,但随后 SDL_ttf.h 找不到"SDL2/SDL.h"。
这是错误:
In file included from main.cpp:3:
/Library/Frameworks/SDL2_ttf.framework/Headers/SDL_ttf.h:30:10: fatal error:
'SDL2/SDL.h' file not found
#include <SDL2/SDL.h>
^
1 error generated.
make: *** [main.o] Error 1
请注意,当我像这样包含 SDL2 时:
#include <SDL2/SDL.h>
我甚至无法编译一个基本程序(没有扩展的SDL2)。我通过将其更改为以下内容来使其工作:
#include "SDL.h"
(我还听说后一种语法在可移植性方面更正确?
有什么想法吗?
我在OS X Mavericks上这样做
这是我的文件:主.cpp
#include <iostream>
#include "SDL.h"
#include "SDL_ttf.h"
#include "SDL_image.h"
int main(int argc, char * arg[])
{
if(SDL_Init(SDL_INIT_EVERYTHING) != 0)
{
std::cout << "ERROR" <<std::endl;
return -1;
}
SDL_Window * window = SDL_CreateWindow("Name", SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
640,
480,
SDL_WINDOW_OPENGL);
if (TTF_Init() == -1)
{
sdl::cout << "SDL_ttf failed" << std::endl;
}
SDL_Surface* tempSurface = IMG_Load("test.png");
if (tempSurface == nullptr)
{
std::cout << "failed to load test.png" << std::endl;
}
SDL_FreeSurface(tempSurface);
SDL_Delay(5999);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
生成文件
CXX = clang++
SDL = -framework SDL2 -framework SDL2_ttf -framework SDL2_image
CXXFLAGS = -Wall -c -std=c++11 -I /Library/Frameworks/SDL2.framework/Headers -I /Library/Frameworks/SDL2_ttf.framework/Headers -I /Library/Frameworks/SDL2_image.framework/Header
LDFLAGS = $(SDL) -F /Library/Frameworks
EXE = test
all: $(EXE)
$(EXE): main.o
$(CXX) $(LDFLAGS) $< -o $@
main.o: main.cpp
$(CXX) $(CXXFLAGS) $< -o $@
clean:
rm *.o && rm $(EXE)
编辑:
我已根据DMG文件中的说明将SDL2和SDL2_ttf安装到/Library/Frameworks文件夹中。
我相信
你需要SDL2_ttf才能使用 SDL2。
SDL_ttf (2.0.11) 需要 SDL (1.2)
SDL2_ttf (2.0.12) 需要 SDL2
我已经通过DMG安装了SDL2库,这是使它们可用于Xcode的正确方法。
但是,我想使用 g++ 并通过 MAKE 进行编译,这导致了我上面详述的问题。
答案是安装 SDL2 和扩展库 UNIX 样式,详见此处http://www.ginkgobitter.org/sdl/?FAQMacOSX
然后我能够使用这样的包含语句:
#include "SDL.h"
#include "SDL_ttf.h"
#include "SDL_image.h"
我的makefile现在看起来像这样(注意sdl2-config的使用以及TTF和图像库的链接方式):
CXX = clang++
SDL = `sdl2-config --libs`
CXXFLAGS = -Wall -c -std=c++11 `sdl2-config --cflags`
LDFLAGS = $(SDL) -lSDL2_ttf -lSDL2_image
EXE = test
all: $(EXE)
$(EXE): main.o
$(CXX) $(LDFLAGS) $< -o $@
main.o: main.cpp
$(CXX) $(CXXFLAGS) $< -o $@
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 在Linux中哪里可以找到互斥、未来等的源代码
- 有什么方法可以遍历结构吗
- 我可以在 SDL 窗口外跟踪我的鼠标 pos 吗?
- 我可以使用没有SDL的SDL_MIXER
- 是否可以将 SDL .lib、.dll 和头文件放在某个地方,以便我可以在 Visual Studio 2017 RC 项目中键入 #include < SDL2.h>?
- 我得到了一个使用 SDL 的 OOP 项目。我没有使用继承。我可以给我的评估员什么理由
- 是否可以使用 select(2) 来监视 SDL 文本输入事件
- 我可以将SDL-1.2.15与SDL2-Image Extension一起使用
- SDL_ttf找不到"SDL.h",但主要的.cpp可以
- 无法在Eclipse中运行SDL程序,但可以在Windows资源管理器中运行
- 是否可以在c++ /SDL中指定图像/精灵的大小?
- 有人可以清楚地解释这段代码的作用吗?- OpenGL & SDL
- Visual Studio 2010 c++ SDL游戏可以在它编译的计算机上运行,但不能在任何其他计算机上运行
- SDL程序可以自己运行,但不能通过命令行运行