xiaorouji / openwrt-passwall-packages

luci-app-passwall depends packages
95 stars 173 forks source link

[Bug]: gn在编译passwall的可选项,在全选的情况下,报不认识的语句 #266

Closed YingziWo closed 4 weeks ago

YingziWo commented 1 month ago

描述您遇到的bug

ninja build stopped 编译过程中报错的信息

复现此Bug的步骤

1、编译环境:ubuntu20.04.6 2、依赖安装 3、openwrt: lede版本克隆 4、passwall:passwall和openwrt-passwall-packages两者的全部包,克隆到/lede/package/lean/passwall/目录下 5、按lede的编译步骤进行编译 6、在到make menuconfig这步时,在选中luci-app-passwall选择为的同时,其Configuration下的所有项都选择号,保存后退出 7、继续按lede的编译步骤编译 8、在执行make V=s -j1这步时报上述图片中的错误信息 9、经查此错误出自gn模块,由google开源项目而来,编译执行的代码是编译时克隆gn项目代码,不是本项目的代码 10、查看google上gn项目,发现该项目版本更新的频率非常高,于是试着更新本项目gn模块的上游分支源,如下图的红框部分 ninja build stopped3 11、把红框中的三个参数换成最新的gn分支,编译错误依然存在 12、尝试换到去年六月份或之前的分支,替换gn目录下Makefile相应字段,编译能正常通过。只是不知道用以前的分支来编译,会不会影响到编译出来的固件功能? 去年六月参数如下: PKG_SOURCE_DATE:=2023-06-08 PKG_SOURCE_VERSION:=1cd35c1b722472e714c30d12031af81443bb20ae PKG_MIRROR_HASH:=53e4d6bd071f292a0363d44453e050fd2c22b3cccbe3e8eff2c41f22b0e13fbc

您想要实现的目的

见复现bug步骤内容

日志信息

见图片信息

截图

ninja build stopped 编译报错信息 ninja build stopped3 更改gn上游分支信息

系统相关信息

lede的OpenWrt R24.8.1 / LuCI Master (git-24.182.36151-66d29de) 内核版本:6.6.40

其他信息

No response

smallprogram commented 1 month ago

升级的编译器试试,目测gcc版本是不是太老了

# 添加PPA源
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update

# 安装最新的GCC(假设为GCC 11)
sudo apt install gcc-11 g++-11

# 设置默认版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100

# 配置默认版本
sudo update-alternatives --config gcc
sudo update-alternatives --config g++

# 验证安装
gcc --version
g++ --version
YingziWo commented 4 weeks ago

升级的编译器试试,目测gcc版本是不是太老了

# 添加PPA源
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update

# 安装最新的GCC(假设为GCC 11)
sudo apt install gcc-11 g++-11

# 设置默认版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100

# 配置默认版本
sudo update-alternatives --config gcc
sudo update-alternatives --config g++

# 验证安装
gcc --version
g++ --version

谢谢指导!升级编译器到11版本和恢复项目原来上游分支后,届时再报编译固件结果。

YingziWo commented 4 weeks ago

升级的编译器试试,目测gcc版本是不是太老了

# 添加PPA源
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update

# 安装最新的GCC(假设为GCC 11)
sudo apt install gcc-11 g++-11

# 设置默认版本
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100

# 配置默认版本
sudo update-alternatives --config gcc
sudo update-alternatives --config g++

# 验证安装
gcc --version
g++ --version

谢谢指导!升级编译器到11版本和恢复项目原来上游分支后,届时再报编译固件结果。

查看编译环境ubuntu20.04.6 官方版本的gcc编译器版本是: gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0 Copyright (C) 2019 Free Software Foundation, Inc.

g++ (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0 Copyright (C) 2019 Free Software Foundation, Inc.

按指导步骤升级到11版本后,系统的编译器版本显示: gcc (Ubuntu 11.4.0-2ubuntu1~20.04) 11.4.0 Copyright (C) 2021 Free Software Foundation, Inc.

g++ (Ubuntu 11.4.0-2ubuntu1~20.04) 11.4.0 Copyright (C) 2021 Free Software Foundation, Inc.

在此升级gcc版本的ubuntu20.04.6编译环境下,删老的lede目录,重新克隆lede项目,再重新走了一遍lede+passwall的源码编译步骤,并且是全选了passwall的所有可选配置选项,这次编译没有出现本题“bug”的现象出现,一步成功,确实是编译器的问题。

同时也去看了看手头上还有的ubuntu22.04.4版本的编译器,这个ubuntu官方版本缺省的gcc编译器也是11版本的,具体是: gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 Copyright (C) 2021 Free Software Foundation, Inc.

g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 Copyright (C) 2021 Free Software Foundation, Inc. 于是在这个ubuntu22.04.4版本的环境下也去走了一遍lede+passwall的源码编译步骤,也是一步成功。

下面图片是ubuntu20.04.6 官方版本缺省gcc版本升级到11版本编译出来的固件安装后,passwall主要页面(每张图的左边)和在ubuntu20.04.6 官方版本缺省gcc版本下,同时更改passwall依赖包gn上游的分支到23年六月份后,再编译出来的固件进行安装后得到的passwall主要页面(每张图的右边)对照图,除了有一张可能正好碰到Hysteria升级版本号显示不一样外,在使用者的界面上看是相同的。 gcc114+gcc9-passwall01

gcc114+gcc9-passwall02

gcc114+gcc9-passwall03

gcc114+gcc9-passwall04

gcc114+gcc9-passwall05

gcc114+gcc9-passwall06

gcc114+gcc9-passwall07

gcc114+gcc9-passwall08

gcc114+gcc9-passwall09

界面对比不一样的地方: HysteriaUpdate

于是,小白好奇心去看了看google开源项目gn到底是个干什么用的家伙,官方开场白里有这样一段总结性的介绍: GN 可以在大多数流行平台上为 C、C++、Rust、Objective C 和 Swift 源生成 Ninja 构建文件。 “Ninja”不是日本的忍者符号吗?生成“忍者”?思来想去,小白这样理解,也不知对不对:可能是开放性平台下码农们身处环境非常之险恶(处在各种各样的编程语言包围之下),为了能快速突破跨各种编程语言之间的界限限制(码农们能够熟练掌握的编程语言数量固然会受不同的限制),gn整合一个大家都适合使用的忍者性质工具(装备)供码农们采用,这个装备方便突围各种各样的编程语言包围环境,以利于提高编程和编译的效率。