awk: line 2: function strtonum never defined

本文介绍了一个具体的awk错误:function strtonum never defined,该错误出现在尝试使用regeneraterootfscpio进行编译的过程中,并提供了通过安装gawk来解决此问题的方法。
编译报awk错误:
regenerate rootfs cpio
15757 块
16892 块
awk: line 2: function strtonum never defined
awk: line 2: function strtonum never defined
ERROR: build kernel Failed

解决办法:
sudo apt-get install gawk

<think>我们遇到了两个主要错误: 1. awk脚本报错:`function asort never defined`,表明awk版本不支持asort函数(asort是gawk的扩展函数) 2. mconf加载失败:缺少libncurses.so.5库 ### 解决方案分步说明: #### 步骤1:修复awk环境(安装gawk) ```bash # 检查当前awk版本 awk --version # 安装gawk(提供asort函数) sudo apt install gawk # 创建符号链接(如果系统默认awk不是gawk) sudo ln -sf /usr/bin/gawk /usr/bin/awk ``` #### 步骤2:安装libncurses5兼容库 ```bash # Ubuntu/Debian系统 sudo apt install libncurses5 # 如果已安装但版本不匹配,创建符号链接(示例路径,实际需根据系统调整) sudo ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/libncurses.so.5 sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/libtinfo.so.5 ``` #### 步骤3:验证修复效果 ```bash # 检查awk功能 echo | awk '{ a[1]=9; a[2]=5; asort(a); for(i in a) print i,a[i] }' # 检查库文件是否存在 ls -l /usr/lib/libncurses.so.5 ldd $(which mconf) # 需在OpenWrt编译目录下找到mconf,或指定完整路径 ``` #### 步骤4:重新执行配置 ```bash # 清理配置缓存(可选) rm -f tmp/.config* tmp/.config.old # 重新运行配置 sudo make menuconfig ``` ### 根本原因分析: 1. **awk兼容性问题**:系统默认awk可能是mawk(不支持asort),而OpenWrt编译脚本依赖gawk 2. **动态库缺失**:新系统通常安装libncurses6,但OpenWrt 15.05.1的mconf需要旧版libncurses5 ### 注意事项: - 避免使用`sudo`执行make(除非必要),否则可能引发权限问题 - 对于较旧的OpenWrt版本(如15.05.1),建议在Ubuntu 14.04或16.04等兼容系统上编译 §§相关问题§§ 1. 在Linux系统中如何查看当前正在使用的awk版本类型? 2. 动态库链接错误"error while loading shared libraries"有哪些常见解决方法? 3. 为什么在编译旧版开源软件时经常需要安装兼容性库? 4. 在OpenWrt编译系统中,除了menuconfig还有哪些重要配置工具?</think>### OpenWrt 编译配置错误分析与解决方案 #### 错误原因分析: 1. **AWK 函数缺失**: ```bash awk: include/scan.awk: line 21: function asort never defined ``` - 系统默认的 `awk` 不支持 `asort()` 函数(需 GNU awk) - 常见于使用 `mawk` 而非 `gawk` 的系统环境 2. **ncurses 库缺失**: ```bash scripts/config/mconf: error while loading shared libraries: libncurses.so.5 ``` - 编译系统需要旧版 ncurses5 库 - 新系统默认安装 ncurses6,缺乏向后兼容 #### 完整解决方案: ##### 步骤 1:安装 GNU awk (gawk) ```bash # 检查当前 awk 类型 ls -l /usr/bin/awk # 安装 gawk sudo apt install gawk # 设置默认 awk 为 gawk(选择配置选项) sudo update-alternatives --config awk # 选择 /usr/bin/gawk 对应的数字 ``` ##### 步骤 2:安装 ncurses5 兼容库 ```bash # Ubuntu/Debian 系统 sudo apt install libncurses5 libncurses5-dev # CentOS/RHEL 系统 sudo yum install ncurses-compat-libs ``` ##### 步骤 3:创建符号链接(如果库文件存在但版本不匹配) ```bash # 检查现有 ncurses 库版本 ls /usr/lib/x86_64-linux-gnu/libncurses* # 创建兼容链接(示例路径,实际路径可能不同) sudo ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6 /usr/lib/libncurses.so.5 sudo ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6 /usr/lib/libtinfo.so.5 ``` ##### 步骤 4:验证修复 ```bash # 检查 asort 函数支持 awk 'BEGIN { a[1]=9; a[2]=5; asort(a); for(i in a) print i, a[i] }' # 检查 ncurses 库链接 ldd $(find . -name mconf 2>/dev/null) | grep ncurses ``` ##### 步骤 5:重新运行配置 ```bash # 清理临时文件 make clean # 重新运行配置(避免使用 sudo) make menuconfig ``` #### 替代方案(容器编译): ```bash # 使用 Docker 创建兼容编译环境 docker run -it -v $(pwd):/openwrt openwrtorg/sdk:15.05.1 /bin/bash # 容器内执行 cd /openwrt make menuconfig ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值