使用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
相关产品推荐
相关产品推荐

