Files
Frostbite2D/.opencode/plans/fix_sdl_image_link.md
Lenheart cb9f497fbb feat(资源加载): 替换stb_image为SDL_image并添加脚本解析功能
- 将stb_image替换为SDL_image以解决Switch平台兼容性问题
- 添加PVF资源包解析器和脚本解析器功能
- 修改各平台配置文件添加SDL_image依赖
- 更新纹理加载逻辑使用SDL_image API
- 新增脚本解析相关类用于处理游戏脚本数据
2026-03-18 04:18:57 +08:00

1.8 KiB

修复 SDL2_image 链接错误计划

问题描述

链接时出现大量 undefined reference 错误,主要是关于 libjpeg 的函数:

  • jpeg_calc_output_dimensions
  • jpeg_CreateDecompress
  • jpeg_destroy_decompress
  • jpeg_finish_decompress 等等

问题原因

SDL2_image 依赖多个第三方库来支持不同的图片格式:

  • libjpeg - JPEG 格式支持
  • libpng - PNG 格式支持
  • libtiff - TIFF 格式支持
  • libwebp - WebP 格式支持 等等

需要在 switch.lua 中添加这些依赖库的链接。

修复方案

修改 platform/switch.lua

add_syslinks 中添加 SDL2_image 所需的依赖库。

根据 devkitPro/portlibs 的通常配置,需要添加:

  • libpng
  • libjpeg
  • zlib (libpng 依赖)
  • 可能还需要其他库

具体修复代码

修改 platform/switch.lua 中的 add_syslinks 部分:

-- 修改前
add_syslinks("SDL2_mixer", "SDL2_image", "SDL2", "opusfile", "opus", "vorbisidec", "ogg",
                     "modplug", "mpg123", "FLAC", "GLESv2", "EGL", "glapi", "drm_nouveau",
                     {public = true})

-- 修改后
add_syslinks("SDL2_mixer", "SDL2_image", "SDL2", 
             "png", "jpeg", "z",  -- SDL2_image 依赖
             "opusfile", "opus", "vorbisidec", "ogg",
             "modplug", "mpg123", "FLAC", "GLESv2", "EGL", "glapi", "drm_nouveau",
             {public = true})

库的顺序说明

链接顺序很重要,被依赖的库要放在后面:

  • SDL2_image 依赖 png、jpeg、z
  • png 依赖 z
  • 所以顺序是: SDL2_image → png → jpeg → z

备选方案

如果上面的库还不够,可以尝试添加更多库:

  • tiff - TIFF 支持
  • webp - WebP 支持
  • lzma - 某些图片格式可能需要

测试步骤

  1. 应用修复
  2. 清理缓存
  3. 重新编译
  4. 验证链接成功