编译系统镜像出现error: expected unqualified-id

本人在Ubuntu20.04的docker容器中拉取了下列的SDK,打算编译一个镜像出来

git clone https://ghproxy.com/https://github.com/milkv-duo/duo-buildroot-sdk.git

但是在执行完./build_milkv.sh后不久爆出以下错误

  CXX    f-lang.o
  CXX    f-typeprint.o
  CXX    f-valprint.o
  CXX    filename-seen-cache.o
In file included from /work/duo-buildroot-sdk/host-tools/gcc/riscv64-linux-musl-x86_64/riscv64-unknown-linux-musl/include/c++/10.2.0/vector:72,
                 from ../../gdb/gdbsupport/common-utils.h:24,
                 from ../../gdb/gdbsupport/common-defs.h:131,
                 from ../../gdb/defs.h:28,
                 from ../../gdb/f-valprint.c:23:
/work/duo-buildroot-sdk/host-tools/gcc/riscv64-linux-musl-x86_64/riscv64-unknown-linux-musl/include/c++/10.2.0/bits/vector.tcc: In member function 'std::vector<_Tp, _Alloc>& std::vector<_Tp, _Alloc>::operator=(const std::vector<_Tp, _Alloc>&)':
/work/duo-buildroot-sdk/host-tools/gcc/riscv64-linux-musl-x86_64/riscv64-unknown-linux-musl/include/c++/10.2.0/bits/vector.tcc:228:52: error: expected unqualified-id
  228 |        std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish,
      |                                                    ^~~~~~~
  CXX    filesystem.o
  CXX    findcmd.o
make[4]: *** [Makefile:1660: f-valprint.o] Error 1
make[4]: *** Waiting for unfinished jobs....
make[4]: Leaving directory '/work/duo-buildroot-sdk/buildroot-2021.05/output/milkv_duo_musl_riscv64/build/gdb-9.2/build/gdb'
make[3]: *** [Makefile:9230: all-gdb] Error 2
make[3]: Leaving directory '/work/duo-buildroot-sdk/buildroot-2021.05/output/milkv_duo_musl_riscv64/build/gdb-9.2/build'
make[2]: *** [Makefile:852: all] Error 2
make[2]: Leaving directory '/work/duo-buildroot-sdk/buildroot-2021.05/output/milkv_duo_musl_riscv64/build/gdb-9.2/build'
make[1]: *** [package/pkg-generic.mk:250: /work/duo-buildroot-sdk/buildroot-2021.05/output/milkv_duo_musl_riscv64/build/gdb-9.2/.stamp_built] Error 2
make[1]: Leaving directory '/work/duo-buildroot-sdk/buildroot-2021.05'
make: *** [Makefile:580: br-rootfs-pack] Error 2
Error: Build board milkv-duo failed!

请问一下我该怎么解决这个问题?

再次执行一遍编译脚本
出现了不一样的报错信息……

./var/spool
./var/tmp
./var/www/
/work/duo-buildroot-sdk/milkv/gen_burn_image_sd.sh /work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd
BR_DIR: /work/duo-buildroot-sdk/buildroot-2021.05
BR_BOARD: milkv_duo_musl_riscv64
/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd
/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd /work/duo-buildroot-sdk/build
/work/duo-buildroot-sdk/milkv/genimage-milkv-duo.cfg:34: no sub-section title/index for 'config'
INFO: cmd: "mkdir -p "/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/tmp"" (stderr):
INFO: cmd: "rm -rf "/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/tmp"/*" (stderr):
INFO: cmd: "mkdir -p "/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/tmp"" (stderr):
INFO: cmd: "cp -a "/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/fs/" "/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/tmp/root"" (stderr):
INFO: cmd: "find '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/tmp/root' -depth -type d -printf '%P\0' | xargs -0 -I {} touch -r '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/fs//{}' '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/tmp/root/{}'" (stderr):
INFO: cmd: "mkdir -p "/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd"" (stderr):
INFO: vfat(boot.vfat): cmd: "dd if=/dev/zero of="/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/boot.vfat" seek=134217728 count=0 bs=1 2>/dev/null" (stderr):
INFO: vfat(boot.vfat): cmd: "mkdosfs  -n 'boot' '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/boot.vfat'" (stderr):
sh: 1: mkdosfs: not found
INFO: vfat(boot.vfat): cmd: "rm -f "/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/boot.vfat"" (stderr):
ERROR: vfat(boot.vfat): failed to generate boot.vfat
gnimage for milkv-duo failed!
/work/duo-buildroot-sdk/build
/work/duo-buildroot-sdk
ls: cannot access '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/*.img': No such file or directory
mv: cannot stat '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/*.img': No such file or directory
/work/duo-buildroot-sdk/out /work/duo-buildroot-sdk
/work/duo-buildroot-sdk
ls: cannot access 'out/*.img': No such file or directory
Error: Gen image failed!

经过多次的运行编译脚本,发现是缺少了一些工具补充安装商即可了

apt install pkg-config unzip dosfstools mtools e2fsprogs

但是,在在最后一次运行编译脚本后出现了以下的报错

INFO: cmd: "mkdir -p "/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd"" (stderr):
INFO: vfat(boot.vfat): cmd: "dd if=/dev/zero of="/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/boot.vfat" seek=134217728 count=0 bs=1 2>/dev/null" (stderr):
INFO: vfat(boot.vfat): cmd: "mkdosfs  -n 'boot' '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/boot.vfat'" (stderr):
mkfs.fat: warning - lowercase labels might not work properly with DOS or Windows
INFO: vfat(boot.vfat): adding file 'fip.bin' as 'fip.bin' ...
INFO: vfat(boot.vfat): cmd: "MTOOLS_SKIP_CHECK=1 mcopy -sp -i '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/boot.vfat' '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/fip.bin' '::'" (stderr):
INFO: vfat(boot.vfat): adding file 'rawimages/boot.sd' as 'rawimages/boot.sd' ...
INFO: vfat(boot.vfat): cmd: "MTOOLS_SKIP_CHECK=1 mcopy -sp -i '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/boot.vfat' '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/rawimages/boot.sd' '::'" (stderr):
INFO: ext4(rootfs.ext4): cmd: "genext2fs -d '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/tmp/root' --size-in-blocks=262144 -i 16384 '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/rootfs.ext4' " (stderr):
sh: 1: genext2fs: not found
INFO: ext4(rootfs.ext4): cmd: "rm -f "/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/rootfs.ext4"" (stderr):
ERROR: ext4(rootfs.ext4): failed to generate rootfs.ext4
gnimage for milkv-duo failed!
/work/duo-buildroot-sdk/build
/work/duo-buildroot-sdk
ls: cannot access '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/*.img': No such file or directory
mv: cannot stat '/work/duo-buildroot-sdk/install/soc_cv1800b_milkv_duo_sd/*.img': No such file or directory
/work/duo-buildroot-sdk/out /work/duo-buildroot-sdk
/work/duo-buildroot-sdk
ls: cannot access 'out/*.img': No such file or directory
Error: Gen image failed!

尝试安装e2fsprogs后再运行还是会出现一样的报错

sudo apt-get install e2fsprogs
root@0d0be594a02f:/work/duo-buildroot-sdk# sudo apt-get install e2fsprogs
Reading package lists... Done
Building dependency tree
Reading state information... Done
e2fsprogs is already the newest version (1.45.5-2ubuntu1.1).
0 upgraded, 0 newly installed, 0 to remove and 11 not upgraded.

确定已经安装好了这个工具,但是依旧有报错……

这个问题解决了……gpt误我……
需要安装的事这个工具……

apt install genext2fs

感谢你分享 debug 过程。我们这就更新 README 把依赖包补全。

1 Like

仓库的README里有写编译环境以及需要安装哪些工具包