AnyPS5输入文件怎么放?input.elf与sce_module目录结构完全图解
【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址: https://gitcode.com/GitHub_Trending/an/AnyPS5
AnyPS5是一款用于将 PS5 可执行文件自动移植到 Linux 和 Windows 的开源工具。它内置的 relinker 转换器能把input.elf转成目标系统原生格式,无需模拟器或额外运行时。但很多新手第一次使用时就卡住了:输入文件到底怎么放?sce_module目录有什么讲究?本文用一张图讲清整个目录结构,让你一次性摆对文件。
一分钟看懂:输入什么、输出什么
整个转换流程只有两个位置参数:
relinker [选项] <input.elf> <输出文件>- Linux 输出:
relinker source/input.elf app.elf - Windows 输出:
relinker --windows source/input.elf app.exe
⚠️ 注意:输出格式由--windows决定,光把输出文件命名为.exe并不会生成 Windows 版本。Intel 平台需追加--to-intel。
标准目录结构:input.elf 与 sce_module 怎么摆
核心规则一句话:主程序input.elf和它的配套模块目录必须放在同一个文件夹里(模块目录放在输入可执行文件的"旁边")。
source/ input.elf ← 主程序(干净的 ELF 可执行文件) sce_module/ ← 游戏自带的 ELF 模块(.prx 等) libkernel.prx libSceNgs2.prx ...转换完成后,运行时布局会自动生成(路径相对于输出文件):
app.elf(或 app.exe) libs/ ← 系统库(.prx,从 build/core/libs/libs/ 复制) app0/ ← 游戏资源 sce_module/ ← 转换后的模块(*.guest.prx)模块会保留在app0/下原来的目录名里,转换时终端还会打印每个模块的确切路径。详细说明见官方文档 docs/user/USAGE.md。
三个目录名怎么选:sce_module、sce_modules 还是 prx
relinker 认三种目录名,它们不是三选一,而是有明确的共存规则:
| 目录组合 | 是否合法 | 说明 |
|---|---|---|
只有sce_module/ | ✅ | 最常见的标准写法 |
只有sce_modules/ | ✅ | 复数形式,同样识别 |
只有prx/ | ✅ | 模块直接放这里 |
prx/+sce_module/(或sce_modules/) | ✅ | 两者可以共存,目录会合并处理 |
sce_module/+sce_modules/同时存在 | ❌ 报错 | 单复数二选一 |
| 三个目录全都不存在 | ❌ 报错 | 除非游戏确实无需模块(调试用--skip-sce-module) |
这个检测逻辑写在 core/relinker/relinker/src/guest/GuestModuleBuilder.cpp,集成测试 core/relinker/relinker/tests/test_guest_module_directories.py 覆盖了上述每种组合,可以放心对照。
模块文件有哪些硬性要求
摆好目录后,文件本身还有几个细节:
- 只认 ELF 文件:目录里每个文件都会被检查 ELF 魔数(
7f 45 4c 46),不是 ELF 的文件(如.txt)会被静默忽略。 - 跳过
.guest.prx后缀:这是转换产物的命名约定,同名产物文件不会被重复处理。 - 目录名本身必须是目录:如果
prx是一个文件而不是文件夹,会直接报错Guest module path is not a directory。 - 模块间不能有重复导出符号,否则会报
Duplicate guest export。
常见报错速查:relinker 提示目录错误时怎么办
| 报错信息 | 原因 | 解决办法 |
|---|---|---|
Both sce_module and sce_modules exist beside the input executable | 单复数目录同时存在 | 删掉其中一个,只保留一个 |
sce_module/sce_modules/prx was not found beside the input executable | 输入文件旁边没有模块目录 | 把模块目录放到input.elf同级目录 |
Guest module path is not a directory | 目录名是个文件 | 删除该文件,重建为目录 |
Duplicate guest export | 不同模块导出了相同符号 | 检查模块来源,去掉重复模块 |
退出码约定:0转换成功,1参数错误,2转换失败(错误打印到 stderr)。
💡 小贴士:命令行参数解析见 core/relinker/cli/src/CliArgs.cpp,直接运行relinker(不带参数)会打印用法并报错退出——它没有--help选项。
转换之后:libs 与 app0 别忘了配齐
光转换成功还不够,运行前还要准备好运行时布局:
- 把编译好的系统库从
build/core/libs/libs/*.prx复制到输出文件旁的libs/目录(注意要用与目标系统匹配的版本); - 游戏资源放到
app0/下; - Linux 下先
chmod +x app.elf再运行,Windows 下 PowerShell 执行.\app.exe即可。
构建步骤可参考 docs/dev/BUILD.md,已验证可玩的游戏列表见 docs/user/COMPATIBILITY.md。
小结
AnyPS5 输入文件的正确摆法可以浓缩成三句话:
input.elf必须是干净的 ELF 主程序;- 配套模块放在旁边的
sce_module/(或sce_modules/、prx/),单复数二选一,prx/可与其一共存; - 输出端配好
libs/系统库和app0/资源,即可运行。
按这个目录结构放置,PS5 可执行文件移植到 Linux / Windows 的第一步就不会再出错。🎮
【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址: https://gitcode.com/GitHub_Trending/an/AnyPS5
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考