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

使用Emscripten构建VirtualBox时遇kmk退出状态2错误求助

在Debian上通过Emscripten构建VirtualBox时遇到kmk安装文件错误

问题详情

在Debian发行版中尝试用Emscripten编译VirtualBox,已解决前期多个问题,但执行以下构建命令时失败:

cd Vbox
source ./env.sh
../emsdk/upstream/emscripten/emmake kmk -p all

核心错误输出

/workspace/Ruffle-Embedded/Vbox/out/linux.amd64/release/bin/src/vboxnetflt/include/iprt/utf16.h: /workspace/Ruffle-Embedded/Vbox/include/iprt/utf16.h | /workspace/Ruffle-Embedded/Vbox/out/linux.amd64/release/bin/src/vboxnetflt/include/iprt/
# recipe to execute (from '/workspace/Ruffle-Embedded/Vbox/kBuild/footer-pass2-installs.kmk', line 67):
        %$(call MSG_INST_FILE,/workspace/Ruffle-Embedded/Vbox/include/iprt/utf16.h,/workspace/Ruffle-Embedded/Vbox/out/linux.amd64/release/bin/src/vboxnetflt/include/iprt/utf16.h)

        $(QUIET)$(INSTALL_STAGING)   -m a+r,u+w                -- /workspace/Ruffle-Embedded/Vbox/include/iprt/utf16.h /workspace/Ruffle-Embedded/Vbox/out/linux.amd64/release/bin/src/vboxnetflt/include/iprt/utf16.h

kmk: *** Exiting with status 2
emmake: error: 'kmk -p all' failed (returned 2)

解决方法

1. 确认目标目录存在

错误显示要将文件复制到/workspace/Ruffle-Embedded/Vbox/out/linux.amd64/release/bin/src/vboxnetflt/include/iprt/,先检查该目录是否存在,不存在则手动创建:

mkdir -p /workspace/Ruffle-Embedded/Vbox/out/linux.amd64/release/bin/src/vboxnetflt/include/iprt/

创建完成后重新执行构建命令。

2. 验证INSTALL_STAGING命令有效性

kBuild中的INSTALL_STAGING是自定义安装命令,检查它的定义和权限:

# 查看env.sh中是否定义了该变量
grep INSTALL_STAGING ./env.sh
# 或通过kmk查看内置变量
cd Vbox
kmk -e | grep INSTALL_STAGING

如果该命令指向的脚本权限不足,执行:

chmod +x <path-to-INSTALL_STAGING-script>

3. 清理构建缓存后重试

缓存文件可能导致路径解析异常,清理out目录后重新构建:

cd Vbox
rm -rf out/linux.amd64/release
source ./env.sh
../emsdk/upstream/emscripten/emmake kmk -p all

4. 检查环境变量冲突

确保Emscripten和VirtualBox的构建环境变量没有冲突:

# 验证Emscripten环境正常
../emsdk/upstream/emscripten/emcc -v
# 查看加载env.sh后的环境变量
source ./env.sh
env | grep -E "(EMSCRIPTEN|VBOX|KBUILD)"

若发现冲突变量,调整env.sh中的定义。

5. 修复文件/目录权限

确认源文件可读、目标目录可写:

# 检查源文件权限
ls -l /workspace/Ruffle-Embedded/Vbox/include/iprt/utf16.h
# 检查目标目录权限
ls -ld /workspace/Ruffle-Embedded/Vbox/out/linux.amd64/release/bin/src/vboxnetflt/include/iprt/

权限不足时执行:

chmod a+r /workspace/Ruffle-Embedded/Vbox/include/iprt/utf16.h
chmod a+w /workspace/Ruffle-Embedded/Vbox/out/linux.amd64/release/bin/src/vboxnetflt/include/iprt/

内容的提问来源于stack exchange,提问作者Silverstock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:05:17