AnyPS5命令行选项全解:relinker全部10个开关的完整参数清单
【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址: https://gitcode.com/GitHub_Trending/an/AnyPS5
AnyPS5 是一个用于将 PS5 可执行文件自动移植到 Linux 和 Windows的开源工具。其核心组件relinker负责把 PS5 的 ELF 可执行文件转换为目标系统的原生格式,并生成可动态链接的系统 prx 库——全程无需模拟器或额外运行时进程。🎮 这篇文章带你完整读懂 relinker 的每一个命令行选项,帮你快速把 PS5 游戏跑起来。
一分钟上手:relinker 命令基本格式
relinker 的调用形式非常简洁(两个位置参数:输入文件和输出文件):
relinker [选项...] <input.elf> <output.elf>- Linux 输出:
relinker source/input.elf app.elf - Windows 输出:
relinker --windows source/input.elf app.exe
⚠️ 注意:输出格式默认是 Linux ELF,即使你把文件名写成.exe也不会自动切换——必须显式加--windows。此外 relinker 没有--help标志,不带参数直接运行会打印完整用法语法(见 main.cpp 中的.exe后缀警告逻辑)。
relinker 完整参数清单
relinker 共有12 个参数:10 个布尔开关 + 2 个取值参数。所有开关默认关闭;unused-filter默认0,--rpath默认为$ORIGIN/libs。
| 参数 | 类型 | 默认值 | 作用 | 状态 |
|---|---|---|---|---|
--windows | 开关 | 关 | 生成 Windows PE 可执行文件 | ✅ 常用 |
--windows-diagnostics | 开关 | 关 | 输出启动依赖诊断,需配合--windows | ✅ 常用 |
--windows-gui | 开关 | 关 | 使用 GUI 子系统而非控制台子系统,需配合--windows | ✅ 常用 |
--to-intel | 开关 | 关 | 转换 AMD 专有指令,让程序运行在 Intel CPU 上 | ✅ 常用 |
unused-filter=0\|1\|2 | 取值 | 0 | 过滤未使用的 NID 导入引用,支持 3 个强度等级 | ✅ 常用 |
--registry | 开关 | 关 | 在输出文件旁写入<输出名>.registry.json调用清单 | ✅ 常用 |
--rpath <路径> | 取值 | $ORIGIN/libs | 设置系统库搜索路径 | ✅ 常用 |
--lazy-binding | 开关 | 关 | 使用延迟符号绑定 | ⚠️ 已弃用 |
--autorun | 开关 | 关 | 转换完成后立即运行并显示退出码 | ✅ 常用 |
--skip-sce-module | 开关 | 关 | 跳过所有捆绑模块处理 | ⚠️ 已弃用 |
--exclude-sce-module <文件> | 开关 | — | 按精确文件名排除捆绑模块,可重复使用 | ⚠️ 已弃用 |
--skip-syscall-check | 开关 | 关 | 禁用系统调用扫描 | ⚠️ 已弃用 |
参数定义完整收录于 Cli.hpp,解析逻辑见 CliArgs.cpp。
目标平台三剑客:--windows / --windows-gui / --windows-diagnostics
--windows:将输出转换为 Windows PE 可执行文件(.exe)。不指定时输出为 Linux ELF。--windows-gui:让 Windows 程序使用GUI 子系统而不是控制台子系统——游戏启动时不会弹出黑色命令行窗口。⚠️ 必须配合--windows使用,否则报错。--windows-diagnostics:在可执行文件中加入启动依赖诊断信息,便于排查 Windows 下"闪退、找不到 DLL"之类的问题。同样必须配合--windows。
这三组依赖关系在 CliArgs.cpp 中做了强制校验:
--windows-diagnostics requires --windows --windows-gui requires --windowsIntel 用户的必备开关:--to-intel
PS5 游戏代码包含大量AMD 专有指令(如 AVX-512 扩展指令),在 Intel CPU 上会直接崩溃。加上--to-intel后,relinker 会把可执行文件和捆绑模块中受支持的 AMD-only 指令自动转换为 Intel 兼容版本,并打印每条替换的指令名、偏移地址(逻辑见 main.cpp)。
转换采用三种策略:原位替换(in place)、打桩(stub)、保留(kept)。无法支持的指令或无法生成桩的转换会直接报错终止——这是刻意设计,避免静默产出损坏的程序。
未引用过滤三档:unused-filter=0 / 1 / 2
PS5 可执行文件中会导入大量系统库函数(NID 引用),其中不少是"死引用"。unused-filter决定过滤强度(注意书写格式是unused-filter=值,没有--前缀,且只能指定一次):
| 等级 | 行为 | 适用场景 |
|---|---|---|
0(默认) | 保留全部导入的 NID 引用 | 最安全,首次转换建议用它 |
1 | 基于控制流图和 GOT 访问分析,过滤未使用的非 PLT导入,保留 PLT 导入 | 常规优化 |
2 | 严格模式:完整的未用导入分析并压缩 PLT;遇到不支持的分析场景直接报错 | 追求最精简产物 |
等级 2 启用的是严格过滤器MakeStrictUnusedNidFilter(见 main.cpp),核心分析模块位于 UnusedNidFilter.hpp,包含控制流图(ControlFlowGraph.cpp)、严格可达性分析(StrictReachability.cpp)和 PLT 压缩器(PltCompactor.cpp)。
库路径与调用清单:--rpath 与 --registry
--rpath <path>:修改运行时系统库搜索路径,默认$ORIGIN/libs(输出可执行文件旁的libs/目录)。Linux 上要求是绝对路径或以$ORIGIN开头;别忘了给$ORIGIN加引号防止 shell 提前展开,例如--rpath '$ORIGIN/libs'。--registry:在输出文件旁额外生成<输出名>.registry.json,记录所有外部 prx 调用条目(见 CallRegistryWriter),方便你核对程序到底依赖哪些系统库。
转换成功后,relinker 会打印预期的运行时目录布局:
app.elf 或 app.exe libs/ *.prx app0/ <游戏资源>把编译好的系统库从build/core/libs/libs/*.prx复制到libs/(Linux/Windows 版本要对应目标系统)即可。
转换完顺手就跑:--autorun
加上--autorun后,relinker 转换完成后会立即执行生成的程序:
- Linux:自动为输出文件添加可执行权限,然后运行
- Windows:运行后打印退出码
- 运行结束会显示原始退出码与解包后的退出码,并等待你按回车才退出(方便查看报错)
注意:它要求目标系统和完整的运行时目录布局都已准备好,且返回值会透传游戏自身的退出码。实现见 Autorun.cpp。
⚠️ 谨慎使用:四个已弃用的调试开关
以下 4 个开关在官方文档中标记为deprecated(已弃用),仅供调试:如果游戏带着这些开关运行,将"极度不稳定,不适合常规使用"(原文见 USAGE.md)。
| 开关 | 说明 | 限制 |
|---|---|---|
--skip-sce-module | 跳过所有捆绑模块的处理 | 与--exclude-sce-module互斥,同用报错 |
--exclude-sce-module <文件> | 按精确文件名(不含路径)排除某个捆绑模块,可重复指定多个 | 文件不存在会报错 |
--skip-syscall-check | 禁用可执行文件与捆绑模块的系统调用扫描 | 可能导致转换出含非法系统调用的程序 |
--lazy-binding | 启用延迟符号绑定(而非立即绑定) | 与捆绑 ELF 模块不兼容 |
简单说:日常使用请避开这 4 个开关,它们存在的意义是帮助开发者调试转换管线本身。
实战示例组合
Linux + 未引用过滤(最常用组合):
relinker unused-filter=1 source/input.elf app.elfWindows 游戏(GUI 子系统)+ Intel CPU + 自动运行:
relinker --windows --windows-gui --to-intel unused-filter=1 source/input.elf app.exe转换前记得把游戏的捆绑 ELF 模块放在输入文件旁的sce_module/、sce_modules/或prx/目录中(三者只能选其一,见 USAGE.md)。
退出码速查
| 退出码 | 含义 |
|---|---|
0 | 转换成功 |
1 | 参数错误(如缺少输入/输出、开关冲突) |
2 | 转换失败,错误详情输出到 stderr |
使用--autorun时,成功转换后返回的是被启动程序的退出码。未知选项和多余的位置参数都会被直接拒绝,错误信息非常明确——relinker 对任何意外状态都严格抛出异常并终止,绝不带病产出文件。
延伸阅读
- 官方使用文档:docs/user/USAGE.md
- 构建指南:docs/dev/BUILD.md
- 已验证游戏兼容列表:docs/user/COMPATIBILITY.md
- CLI 参数定义:core/relinker/cli/include/Cli.hpp
- 转换流水线:core/relinker/relinker/src/pipeline/RelinkerPipeline.cpp
- 系统 prx 库实现:core/libs/prx/
掌握以上参数清单后,绝大多数移植场景都只需--windows/--to-intel/unused-filter这几个组合。先用最安全的unused-filter=0跑通,再逐步加开关优化,就是最稳的上手路径。🚀
【免费下载链接】AnyPS5Tool for automatic PS5 executables porting to Linux and Windows项目地址: https://gitcode.com/GitHub_Trending/an/AnyPS5
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考