ubuntu22.04编译openwrt的lede-17.01一些错误的处理方式

    1. m4
c-stack.c:55:26: error: missing binary operator before token “(“ 55 | #elif HAVE_LIBSIGSEGV &&

解决方法:

wget https://raw.githubusercontent.com/keyfour/openwrt/2722d51c5cf6a296b8ecf7ae09e46690403a6c3d/tools/m4/patches/011-fix-sigstksz.patch -O tools/m4/patches/011-fix-sigstksz.patch
  • 2.mklibs
elf.hpp:52:56: error: ISO C++17 does not allow dynamic exception specifications

原因是g++版本较高,可以通过修改tools/mklibs/Makefile,添加HOST_CPPFLAGS += -std=gnu++98,指定使用的C++的标准,不过我处理到这一步时,感觉后面还会有类似的编译器版本过高导致的问题,降编译器版本才是一劳永逸的。lede-17.01我在ubuntu20.04上验证过没啥编译问题,有也打过一些补丁了。所以把ubuntu22.04的编译器降到和ubuntu20.4一样。ubuntu22.04上的是11版本,ubuntu20.04上的是9版本。使用下面的脚本来实现:

#!/bin/bash

apt install gcc-9 g++-9

BINS+=" x86_64-linux-gnu-cpp"
BINS+=" x86_64-linux-gnu-g++"
BINS+=" x86_64-linux-gnu-gcc"
BINS+=" x86_64-linux-gnu-gcc-ar"
BINS+=" x86_64-linux-gnu-gcc-nm"
BINS+=" x86_64-linux-gnu-gcc-ranlib"
BINS+=" x86_64-linux-gnu-gcov"
BINS+=" x86_64-linux-gnu-gcov-dump"
BINS+=" x86_64-linux-gnu-gcov-tool"
BINS+=" gcc"
BINS+=" g++"
BINS+=" cpp"
BINS+=" gcc-ar"
BINS+=" gcc-nm"
BINS+=" gcc-ranlib"
BINS+=" gcov"
BINS+=" gcov-dump"
BINS+=" gcov-tool"

for b in $BINS;do
        update-alternatives --install /usr/bin/$b $b /usr/bin/$b-9 50
        update-alternatives --install /usr/bin/$b $b /usr/bin/$b-11 30
done
posted @ 2024-06-13 20:30  thammer  阅读(43)  评论(0编辑  收藏  举报