我目前正在尝试将 SIP 堆栈库 (pjSIP) 移植到 PSP 控制台(使用 PSPSDK 工具链),但我在生成文件时遇到了太多麻烦(进行适当的更改并解决链接问题)。
有没有人知道好的文本、书籍或其他东西可以对移植库有所了解?
该项目提供的唯一关于移植的文档似乎过于专注于主要操作系统。
我目前正在尝试将 SIP 堆栈库 (pjSIP) 移植到 PSP 控制台(使用 PSPSDK 工具链),但我在生成文件时遇到了太多麻烦(进行适当的更改并解决链接问题)。
有没有人知道好的文本、书籍或其他东西可以对移植库有所了解?
该项目提供的唯一关于移植的文档似乎过于专注于主要操作系统。
查看移植到 PSP 的其他库。在库的 linux 版本和 PSP 版本之间进行差异应该会告诉你。
此外,尝试了解 PSP 与 POSIX 的兼容性如何,这将告诉您移植库的工作量有多大。
PSP 不是 UNIX 且不兼容 POSIX,但是开源工具链由 gcc 4.3、bintutils 1.16.1 和 newlib 1.16 组成。
大多数 C 库已经存在并且可以编译您的大部分代码。仅通过使用以下参数调用配置脚本即可移植许多库:
LDFLAGS="-L$(psp-config --pspsdk-path)/lib -lc -lpspuser" ./configure --host psp --prefix=$(pwd)/../target/psp
但是,您可能需要修补您的 configure 和 configure.ac 脚本以了解主机 mips allegrex(PSP cpu),为此您可以搜索 mips*- -)行并将其克隆到 allegrex,例如:
mips*-*-*)
noconfigdirs="$noconfigdirs target-libgloss"
;;
mipsallegrex*-*-*)
noconfigdirs="$noconfigdirs target-libgloss"
;;
然后你运行 make 命令并希望 newlib 有你需要的一切,如果没有,那么你只需要创建你缺少的函数的替代品。
移植是非常特定于平台的,所以我认为您不会找到很多关于该主题的一般文献。
在我的脑海中,你可能会遇到一些事情:
我做了一些更多的研究,并在 ps2dev 论坛上找到了这篇文章:
PSP 不是 Unix 系统,并且 pspsdk 不兼容 POSIX。它在某些地方很接近,但你不能指望只使用在 POSIX 系统上编译良好的任何代码并让它工作。例如:
- pspsdk 使用newlib,它缺少一些glibc 的特性和头文件。
- libc 默认没有链接,所以典型的 autoconf 测试将无法构建
- autoconf 对 PSP 一无所知
- 需要定义 PSP_MODULE_INFO 并在可执行文件上运行 psp-fixup-imports,否则它将无法运行
您应该查看所有其他已移植的库和程序(在 psp 和 pspware 存储库中)。例如,所有 SDL 库都使用 autoconf。
我认为这为我正在寻找的内容提供了更多细节,并且还展示了@[Jonathan Arkell] 的观点,即查看已经移植的库。
感谢您的回复。