feat(资源加载): 替换stb_image为SDL_image并添加脚本解析功能
- 将stb_image替换为SDL_image以解决Switch平台兼容性问题 - 添加PVF资源包解析器和脚本解析器功能 - 修改各平台配置文件添加SDL_image依赖 - 更新纹理加载逻辑使用SDL_image API - 新增脚本解析相关类用于处理游戏脚本数据
This commit is contained in:
66
.opencode/plans/fix_sdl_image_link.md
Normal file
66
.opencode/plans/fix_sdl_image_link.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# 修复 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` 部分:
|
||||
|
||||
```lua
|
||||
-- 修改前
|
||||
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. 验证链接成功
|
||||
Reference in New Issue
Block a user