首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SDL_ttf找不到"SDL.h",但main.cpp可以找到

SDL_ttf找不到"SDL.h",但main.cpp可以找到
EN

Stack Overflow用户
提问于 2013-12-30 21:13:01
回答 2查看 5.2K关注 0票数 2

我正在编写一个make文件来编译一个非常简单的SDL2程序。

到目前为止,它已经很好地编译了SDL2,现在我正在编译扩展框架SDL2_image和SDL_ttf。

看来MAKE是正确地找到了SDL_ttf.h,但是SDL_ttf.h却找不到SDL2 2/SDL.h。

以下是错误:

代码语言:javascript
运行
复制
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时:

代码语言:javascript
运行
复制
#include <SDL2/SDL.h>

我甚至不能编译一个基本的程序(没有扩展的SDL2)。我把它改成这个就行了:

代码语言:javascript
运行
复制
#include "SDL.h"

(我还听说后一种语法在可移植性方面更正确?)

有什么想法吗?

我在OS小牛上做这件事

这是我的文件: main.cpp

代码语言:javascript
运行
复制
#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;

}

makefile

代码语言:javascript
运行
复制
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/ files文件夹中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-31 14:02:15

我通过DMG安装了SDL2库,这是使Xcode可用的正确方法。

但是,我想使用g++并通过MAKE进行编译,这导致了上面详细介绍的问题。

答案是安装SDL2和扩展库

当时,我能够使用如下的include语句:

代码语言:javascript
运行
复制
#include "SDL.h"
#include "SDL_ttf.h"
#include "SDL_image.h"

我的makefile现在看起来如下(注意sdl2-config的使用以及TTF和映像库的链接方式):

代码语言:javascript
运行
复制
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 $@
票数 0
EN

Stack Overflow用户

发布于 2013-12-30 21:21:43

我相信你需要SDL2_ttf和SDL2一起去。

SDL_ttf (2.0.11)需要SDL (1.2)

SDL2_ttf (2.0.12)需要SDL2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20847668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档