You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows下CLion中使用SDL_ttf加载字体出现链接错误求助

问题描述

在Windows系统的CLion中使用SDL_ttf在游戏循环内显示文本:

  • 标准SDL已安装在C:/Programs/SDL/SDL2-2.30.2,SDL_ttf安装在C:/Programs/SDL/SDL2_ttf-2.22.0
  • CMakeLists.txt配置后编译无报错,可正常引入SDL_ttf.h
  • 仅定义TTF_Font* font时程序正常运行,调用TTF_OpenFont加载字体时出现链接错误:

C:\Program Files\JetBrains\CLion 2024.1\bin\mingw\bin/ld.exe: C:/Program Files/SDL/SDL2_ttf-2.22.0/x86_64-w64-mingw32/lib/libSDL2_ttf.a(libSDL2_ttf_la-hb-uniscribe.o): in function _hb_generate_unique_face_name': /Users/valve/release/SDL2_ttf/SDL2_ttf-2.22.0-source/foo-x64/../external/harfbuzz/src/hb-uniscribe.cc:300: undefined reference to __imp_UuidCreate'

  • 改用SDL_ttf的.dll文件后,错误变为:undefined reference to TTF_OpenFont'`
解决方案

1. 解决__imp_UuidCreate未定义错误

该错误是因为SDL_ttf依赖的harfbuzz库需要调用Windows系统的Rpcrt4库(提供UUID生成功能),需在CMakeLists.txt中显式链接该库:

# 链接Rpcrt4系统库
target_link_libraries(你的项目名称 PRIVATE Rpcrt4)

2. 解决动态库模式下TTF_OpenFont未定义错误

如果使用SDL_ttf的动态库(.dll),需确保以下几点:

  • CMake中链接SDL_ttf的动态导入库(通常是libSDL2_ttf.dll.a),而非静态库libSDL2_ttf.a
  • 在引入SDL_ttf头文件前定义SDL2TTF_SHARED宏,告知编译器使用动态链接符号:
    #define SDL2TTF_SHARED
    #include <SDL_ttf.h>
    
  • 将SDL_ttf的SDL2_ttf.dll文件复制到项目可执行文件所在目录,或添加到系统PATH环境变量,保证运行时能加载动态库

3. 参考CMakeLists.txt完整配置

确保CMake正确定位SDL和SDL_ttf,以下是示例配置:

cmake_minimum_required(VERSION 3.20)
project(你的项目名称)

set(CMAKE_CXX_STANDARD 17)

# 指定SDL和SDL_ttf的cmake配置路径
set(SDL2_DIR "C:/Programs/SDL/SDL2-2.30.2/x86_64-w64-mingw32/lib/cmake/SDL2")
set(SDL2_ttf_DIR "C:/Programs/SDL/SDL2_ttf-2.22.0/x86_64-w64-mingw32/lib/cmake/SDL2_ttf")

find_package(SDL2 REQUIRED)
find_package(SDL2_ttf REQUIRED)

add_executable(你的项目名称 main.cpp)

# 链接所有依赖库
target_link_libraries(你的项目名称 PRIVATE SDL2::SDL2 SDL2::SDL2main SDL2_ttf::SDL2_ttf Rpcrt4)

内容的提问来源于stack exchange,提问作者Dee Vee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:01:10