如果你编译emuelec时遇到各种报错,可以参考下列趟坑经验。
1.访问github等国外源码网站不畅导致编译出错:
由于国内网络的原因,访问github各种被中断,导致emuelec中各个子模块应无法获取源代码而无法编译。
解决办法:挨个找到报错的target,手动检查是否包含的git子模块仓库,如果有,则在target仓库中执行git submodule update --init命令,可能需要反复执行,直到所有子模块都更新完毕
git submodule update --init
2.接上面,由于网络导致git子模块同步失败,而emuelec的脚本又会删除子模块中的文件,所以导致即使代码已经更新下来了,编译时还是会报错。这时,你需要进入sources文件夹,找到对应报错的target源码文件夹,挨个检查子模块的文件变动状态,及时将文件状态还原回来。进入相应的git子模块仓库,执行下列还原命令
git restore --staged * && git restore *
3.zip包发布的源码,二次解压时没有覆盖解压
此问题在反复编译jzintv target时发现的。原来是scripts/extract脚本中解压zip文件时没有覆盖解压文件导致的。处理的方式一:进入build将jzintv的文件夹删除,并重新解压。方式二,修改scripts/extract中解压zip包那处命令,添加-o 覆盖解压选项
*.zip)
unzip -o -q "${FULL_SOURCE_PATH}" -d "${2}"
一个自动git子模块更新的脚步,程序一直运行,直到所有的submodule被更新完毕。
使用方法:保存脚本到任意目录,然后进入sources下有submodule的项目,然后执行这个脚本
#!/bin/bash
# date:
# #1: 2022.09.14
# filename: rgitsub.sh
# function:一直更新submodule 直到所有submodule都被更新完毕
while true
do
procnum=`ps -ef | grep "git submodule update --init" | grep -v "grep" | wc -l`
GIT_SUBMODULE_PARAMS="${1}"
if [ $procnum -eq 0 ]; then
if [ -n "${GIT_SUBMODULE_PARAMS}" ]; then
git submodule update --init --recursive "${GIT_SUBMODULE_PARAMS}" && exit 0
else
git submodule update --init && exit 0
fi
fi
sleep 30
done
4.go模块无法下载的问题
也是个国内网络的问题,可以在编译镜像之前,执行设置go的全局代理的命令,比如使用https://goproxy.io
export GOPROXY=https://goproxy.io