为PS2DEV工具链编译SDL1.2时bin2c未生成目标文件
解决PS2DEV工具链构建SDL1.2时bin2c未生成目标文件的问题
尝试为PS2DEV工具链构建SDL1.2时,Makefile中的bin2c工具未生成所需的freesd_irx.c、sio2man_irx.c、padman_irx.c、mtapman_irx.c、audsrv_irx.c、ps2kbd_irx.c、ps2mouse_irx.c、ps2usbd_irx.c文件,以下是相关配置代码及修复方案:
原Makefile.in代码
ifeq ($(_EE), 1) ifeq ($(USE_FREESD), 1) ../src/audio/ps2sdk/freesd_irx.c: $(PS2SDK)/iop/irx/freesd.irx $(PS2SDK)/bin/bin2c $< $@ freesd_irx endif ifeq ($(USE_FREESIO2), 1) ../src/joystick/ps2sdk/sio2man_irx.c: $(PS2SDK)/iop/irx/freesio2.irx $(PS2SDK)/bin/bin2c $< $@ sio2man_irx ../src/joystick/ps2sdk/padman_irx.c: $(PS2SDK)/iop/irx/freepad.irx $(PS2SDK)/bin/bin2c $< $@ padman_irx ../src/joystick/ps2sdk/mtapman_irx.c: $(PS2SDK)/iop/irx/freemtap.irx $(PS2SDK)/bin/bin2c $< $@ mtapman_irx endif ../src/audio/ps2sdk/audsrv_irx.c: $(PS2SDK)/iop/irx/audsrv.irx $(PS2SDK)/bin/bin2c $< $@ audsrv_irx ../src/video/ps2sdk/ps2kbd_irx.c: $(PS2SDK)/iop/irx/ps2kbd.irx $(PS2SDK)/bin/bin2c $< $@ ps2kbd_irx ../src/video/ps2sdk/ps2mouse_irx.c: $(PS2SDK)/iop/irx/ps2mouse.irx $(PS2SDK)/bin/bin2c $< $@ ps2mouse_irx ../src/video/ps2sdk/ps2usbd_irx.c: $(PS2SDK)/iop/irx/usbd.irx $(PS2SDK)/bin/bin2c $< $@ ps2usbd_irx ifeq ($(ENABLE_MTAP), 1) CPPFLAGS = ${CFLAGS}\ -lpadx \ -lmtap else CPPFLAGS = ${CFLAGS} \ -lpad endif CPPFLAGS = \ -lcdvd \ -lpatches \ -lkbd \ -lmouse \ -laudsrv \ -ljpeg \ -ldmakit \ -lgskit endif
原configure.ac代码
dnl Check if bin2c is installed CheckBIN2C() { case $host in mips64r5900el-ps2-elf) AC_PATH_PROG(BIN2C, bin2c, no) if test "$BIN2C" = no; then AC_MSG_ERROR([bin2c tool not found. Please install it or adjust your PATH.]) fi ;; *) # Do nothing ;; esac } CheckPS2SDK() { case $host in mips64r5900el-ps2-elf) _EE=1 USE_FREESD=1 USE_FREESIO2=1 ENABLE_MTAP=1 AS_IF([test "x$_EE" = "x1"], [AC_DEFINE([_EE], [1], [Description for _EE])]) AS_IF([test "x$USE_FREESD" = "x1"], [AC_DEFINE([USE_FREESD], [1], [Description for USE_FREESD])]) AS_IF([test "x$USE_FREESIO2" = "x1"], [AC_DEFINE([USE_FREESIO2], [1], [Description for USE_FREESIO2])]) AS_IF([test "x$ENABLE_MTAP" = "x1"], [AC_DEFINE([ENABLE_MTAP], [1], [Description for ENABLE_MTAP])]) ;; *) # Do nothing ;; esac }
修复方案
1. 验证bin2c工具的可用性
- 确认
$(PS2SDK)/bin/bin2c文件存在且有执行权限,直接运行以下命令测试:
若命令报错,需重新安装PS2SDK或修正$PS2SDK/bin/bin2c --helpPS2SDK环境变量的路径。
2. 修复Makefile中的变量覆盖与依赖问题
原Makefile存在变量覆盖问题:最后一段的CPPFLAGS赋值完全覆盖了前面根据ENABLE_MTAP设置的内容,同时未将bin2c生成的文件加入全局编译依赖。修改后的片段如下:
ifeq ($(_EE), 1) # 统一管理所有bin2c生成的目标文件 IRX_C_FILES = \ ../src/audio/ps2sdk/freesd_irx.c \ ../src/joystick/ps2sdk/sio2man_irx.c \ ../src/joystick/ps2sdk/padman_irx.c \ ../src/joystick/ps2sdk/mtapman_irx.c \ ../src/audio/ps2sdk/audsrv_irx.c \ ../src/video/ps2sdk/ps2kbd_irx.c \ ../src/video/ps2sdk/ps2mouse_irx.c \ ../src/video/ps2sdk/ps2usbd_irx.c # 将生成文件加入全局构建依赖 all: $(IRX_C_FILES) ifeq ($(USE_FREESD), 1) ../src/audio/ps2sdk/freesd_irx.c: $(PS2SDK)/iop/irx/freesd.irx $(PS2SDK)/bin/bin2c $< $@ freesd_irx endif ifeq ($(USE_FREESIO2), 1) ../src/joystick/ps2sdk/sio2man_irx.c: $(PS2SDK)/iop/irx/freesio2.irx $(PS2SDK)/bin/bin2c $< $@ sio2man_irx ../src/joystick/ps2sdk/padman_irx.c: $(PS2SDK)/iop/irx/freepad.irx $(PS2SDK)/bin/bin2c $< $@ padman_irx ../src/joystick/ps2sdk/mtapman_irx.c: $(PS2SDK)/iop/irx/freemtap.irx $(PS2SDK)/bin/bin2c $< $@ mtapman_irx endif ../src/audio/ps2sdk/audsrv_irx.c: $(PS2SDK)/iop/irx/audsrv.irx $(PS2SDK)/bin/bin2c $< $@ audsrv_irx ../src/video/ps2sdk/ps2kbd_irx.c: $(PS2SDK)/iop/irx/ps2kbd.irx $(PS2SDK)/bin/bin2c $< $@ ps2kbd_irx ../src/video/ps2sdk/ps2mouse_irx.c: $(PS2SDK)/iop/irx/ps2mouse.irx $(PS2SDK)/bin/bin2c $< $@ ps2mouse_irx ../src/video/ps2sdk/ps2usbd_irx.c: $(PS2SDK)/iop/irx/usbd.irx $(PS2SDK)/bin/bin2c $< $@ ps2usbd_irx # 使用+=追加CPPFLAGS,避免覆盖原有配置 ifeq ($(ENABLE_MTAP), 1) CPPFLAGS += -lpadx -lmtap else CPPFLAGS += -lpad endif CPPFLAGS += \ -lcdvd \ -lpatches \ -lkbd \ -lmouse \ -laudsrv \ -ljpeg \ -ldmakit \ -lgskit endif
3. 确保configure变量传递到Makefile
在configure.ac的CheckPS2SDK函数后添加变量导出代码,让配置变量能被Makefile识别:
# 导出配置变量到Makefile AC_SUBST(_EE) AC_SUBST(USE_FREESD) AC_SUBST(USE_FREESIO2) AC_SUBST(ENABLE_MTAP)
4. 重新生成配置并构建
执行以下命令重置配置并重新构建:
autoreconf -i ./configure --host=mips64r5900el-ps2-elf make clean && make
内容的提问来源于stack exchange,提问作者7dog123
相关产品推荐
相关产品推荐

