You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为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/bin/bin2c --help
    
    若命令报错,需重新安装PS2SDK或修正PS2SDK环境变量的路径。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 12:22:43