Windows下SDL2项目使用SDL2_ttf相对路径加载.ttf字体失败求助
SDL2 TTF_OpenFont 相对路径加载字体失败问题
在Windows上搭建了一个简单的SDL2项目,希望在SDL2窗口中显示文本。使用绝对路径可正常加载字体,但调用TTF_OpenFont使用相对路径时返回nullptr。尝试过基于cpp文件和可执行文件的两种路径,也替换了Windows系统的目录分隔符为\,但均未成功。
项目目录
Project Directory ├─bin │ └─debug │ main.exe │ SDL2.dll │ SDL2_image.dll │ SDL2_ttf.dll │ ├─res │ font.ttf │ └─src main.cpp renderwindow.cpp renderwindow.hpp
相关代码(renderwindow.cpp)
#include <iostream> #include <SDL2/SDL.h> #include <SDL2/SDL_ttf.h> //... TTF_Font *font = TTF_OpenFont("../res/font.ttf", 16); if (font == nullptr) { std::cout << "Font couldn't load." << std::endl; } //... 文本渲染相关代码
输出
Font couldn't load.
解决方案
- 明确相对路径基准:程序中所有文件IO的相对路径都是基于程序运行时的工作目录,而非源码文件所在目录。可以先打印当前工作目录确认:
#include <windows.h> // ... char buf[256]; GetCurrentDirectoryA(256, buf); std::cout << "当前工作目录: " << buf << std::endl; - 调整路径匹配工作目录:
- 如果工作目录是项目根目录(多数IDE默认配置),使用路径
"res/font.ttf" - 如果工作目录是
bin/debug,使用路径"../../res/font.ttf"(从debug目录向上两级回到项目根,再进入res文件夹)
- 如果工作目录是项目根目录(多数IDE默认配置),使用路径
- 路径分隔符注意事项:Windows下
/和\都支持,但若使用\,C++字符串中需要写成转义形式\\,比如"..\\..\\res\\font.ttf" - 排查具体错误:用
TTF_GetError()获取更详细的错误信息,帮助定位问题:if (font == nullptr) { std::cout << "字体加载失败: " << TTF_GetError() << std::endl; } - 额外检查:确认
res/font.ttf文件存在、文件名拼写正确(Windows不区分大小写,但尽量保持一致)
内容的提问来源于stack exchange,提问作者ywbird
相关产品推荐
相关产品推荐

