gdate.c:2497:7: error: format not a string literal, format string not checked [-Werror=format-nonlit

本文介绍了解决OpenWrt SDK编译过程中遇到的gdate.c格式字符串非字面量警告的方法。通过创建并应用补丁文件001-glib-gdate-suppress-string-format-literal-warning.patch,可以有效避免这一编译警告。

目录

编译openwrt问题:

解决:

内容如下:


编译openwrt sdk时,出现个gdate.c的错误,与编译器版本有关,打个patch就好

编译openwrt问题:

gdate.c: In function 'g_date_strftime':
gdate.c:2497:7: error: format not a string literal, format string not checked [-Werror=format-nonliteral]
      tmplen = strftime (tmpbuf, tmpbufsize, locale_format, &tm);
      ^~~~~~
cc1: some warnings being treated as errors
make[10]: *** [Makefile:1386: libglib_2_0_la-gdate.lo] Error 1
make[10]: Leaving directory '/opt/water/tina-sdk/out/mandolin-perf1/compile_dir/host/pkg-config-0.29/glib/glib'
 

解决:

单独改源码方式不好,下次重新编译有可能又要重新改, 所以新建个patch一劳永逸

tools/pkg-config/patches/目录下创建新文件001-glib-gdate-suppress-string-format-literal-warning.patch

内容如下:

--- a/glib/glib/gdate.c
+++ b/glib/glib/gdate.c
@@ -2439,6 +2439,9 @@ win32_strftime_helper (const GDate     *d,
  *
  * Returns: number of characters written to the buffer, or 0 the buffer was too small
  */
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wformat-nonliteral"
+
 gsize     
 g_date_strftime (gchar       *s, 
                  gsize        slen, 
@@ -2549,3 +2552,5 @@ g_date_strftime (gchar       *s,
   return retval;
 #endif
 }
+
+#pragma GCC diagnostic pop

创建完,再执行编译,编译过程openwrt会自动把这个patch打到源码中,无需手动执行patch。

OpenWrt 详细资料总结

OpenWrt 是一个基于 Linux 的嵌入式操作系统,主要用于路由器和其他网络设备。它提供了强大的定制能力、丰富的软件包管理以及活跃的开源社区支持。以下是关于 OpenWrt 的详细资料总结:


1. OpenWrt 简介

  • 目标设备:路由器、嵌入式网络设备(如智能网关、NAS、IoT 设备)。
  • 核心特点
    • 模块化设计,支持大量软件包扩展(如 VPN、QoS、防火墙)。
    • 提供 opkg 包管理系统(类似 Linux 的 apt/yum)。
    • 支持多种硬件架构(MIPS、ARM、x86 等)。
    • Web 管理界面(LuCI)和命令行配置。
  • 适用场景
    • 路由器固件替代(替代厂商固件,如 TP-Link、Netgear)。
    • 网络实验(如搭建 VPN 服务器、流量监控)。
    • IoT 设备开发(如智能家居网关)。

2. OpenWrt 开发环境搭建

(1) 硬件要求

  • 支持的路由器型号(可在 OpenWrt 硬件支持列表 查询)。
  • 推荐开发板:
    • Raspberry Pi(ARM)
    • x86 迷你 PC(如 Intel NUC)
    • 常见路由器(如 TP-Link Archer C7, Netgear R7800)

(2) 软件工具

  • 编译环境

    • Linux(Ubuntu/Debian 推荐)或 WSL2(Windows)。
    • 依赖安装:
      sudo apt update
      sudo apt install build-essential ccache flex g++ gawk gettext git libncurses5-dev libssl-dev python3 python3-distutils rsync unzip zlib1g-dev
      
  • 源码获取

    git clone https://git.openwrt.org/openwrt/openwrt.git
    cd openwrt
    ./scripts/feeds update -a
    ./scripts/feeds install -a
    
  • 配置与编译

    make menuconfig  # 选择目标设备架构和软件包
    make -j$(nproc)  # 开始编译
    

3. OpenWrt 核心功能

(1) 网络功能

功能说明
防火墙 (netfilter)支持 iptables/nftables
QoS (SQM)智能流量控制
VPN (OpenVPN/WireGuard)支持多种 VPN 协议
IPv6完整支持 IPv6
Mesh Networking支持 802.11s (无线 Mesh)

(2) Web 管理界面 (LuCI)

  • 默认基于 Lua 的 Web UI,可通过 opkg 安装:

    opkg update
    opkg install luci
    
  • 访问方式:http://<路由器IP>(默认用户名 root,初始无密码)。

(3) 软件包管理 (opkg)

  • 安装软件包

    opkg update
    opkg install <package_name> # e.g., tcpdump, iperf3
    
  • 常用软件包

    类别软件包示例
    VPNopenvpnwireguard
    NASsamba4minidlna
    IoTmosquitto (MQTT), nodejs
    Monitoringtcpdumpiftopvnstat

4. OpenWrt vs. DD-WRT vs. Tomato

特性OpenWrtDD-WRTTomato
定制性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
软件包支持⭐⭐⭐⭐⭐⭐⭐
性能优化⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
新手友好度⭐⭐⭐⭐⭐⭐⭐⭐⭐

✅ OpenWrt 适合高级用户和开发者,DD-WRT/Tomato 适合普通用户


5. OpenWrt 学习资源

(1) 官方文档

(2) 书籍 & 教程

  • 《OpenWrt智能路由系统开发》
  • 《Mastering OpenWrt》(英文)

(3) GitHub & SDK


6. OpenWrt FAQ

(1) OpenWrt 能刷到哪些设备?

  • 官方支持列表
  • 推荐设备
    • TP-Link Archer C7
    • Raspberry Pi (作为软路由)
    • x86 PC (用于高级路由/NAS)

(2) OpenWrt vs. LEDE?

  • LEDE (Linux Embedded Development Environment) 是 OpenWrt 的一个分支,后来合并回 OpenWrt。现在统一使用 OpenWrt。

(3) OpenWrt vs. pfSense/OPNsense?

  • OpenWrt 适合嵌入式设备和小型路由
  • pfSense/OPNsense 适合 x86_64 PC,功能更强大(企业级防火墙)

总结

OpenWrt 是一个高度可定制的开源路由器系统,适用于网络开发者、极客和 IoT 应用。它提供了强大的软件生态和灵活的配置方式,但学习曲线较陡。如果你需要替代厂商固件或搭建高级网络功能,OpenWrt 是最佳选择之一。

gdate.c: In function 'g_date_strftime': gdate.c:2497:7: error: format not a string literal, format string not checked [-Werror=format-nonliteral] tmplen = strftime (tmpbuf, tmpbufsize, locale_format, &tm); ^~~~~~ cc1: some warnings being treated as errors Makefile:1386: recipe for target 'libglib_2_0_la-gdate.lo' failed make[10]: *** [libglib_2_0_la-gdate.lo] Error 1 make[10]: Leaving directory '/home/zhangjc/openwrt-15.05.1/build_dir/host/pkg-config-0.29/glib/glib' Makefile:1933: recipe for target 'all-recursive' failed make[9]: *** [all-recursive] Error 1 make[9]: Leaving directory '/home/zhangjc/openwrt-15.05.1/build_dir/host/pkg-config-0.29/glib/glib' Makefile:952: recipe for target 'all' failed make[8]: *** [all] Error 2 make[8]: Leaving directory '/home/zhangjc/openwrt-15.05.1/build_dir/host/pkg-config-0.29/glib/glib' Makefile:1045: recipe for target 'all-recursive' failed make[7]: *** [all-recursive] Error 1 make[7]: Leaving directory '/home/zhangjc/openwrt-15.05.1/build_dir/host/pkg-config-0.29/glib' Makefile:769: recipe for target 'all' failed make[6]: *** [all] Error 2 make[6]: Leaving directory '/home/zhangjc/openwrt-15.05.1/build_dir/host/pkg-config-0.29/glib' Makefile:697: recipe for target 'all-recursive' failed make[5]: *** [all-recursive] Error 1 make[5]: Leaving directory '/home/zhangjc/openwrt-15.05.1/build_dir/host/pkg-config-0.29' Makefile:456: recipe for target 'all' failed make[4]: *** [all] Error 2 make[4]: Leaving directory '/home/zhangjc/openwrt-15.05.1/build_dir/host/pkg-config-0.29' Makefile:39: recipe for target '/home/zhangjc/openwrt-15.05.1/build_dir/host/pkg-config-0.29/.built' failed make[3]: *** [/home/zhangjc/openwrt-15.05.1/build_dir/host/pkg-config-0.29/.built] Error 2 make[3]: Leaving directory '/home/zhangjc/openwrt-15.05.1/tools/pkg-config' tools/Makefile:122: recipe for target 'tools/pkg-config/compile' failed make[2]: *** [tools/pkg-config/compile] Error 2 make[2]: Leaving directory '/home/zhangjc/openwrt-15.05.1' tools/Makefile:121: recipe for target '/home/zhangjc/openwrt-15.05.1/staging_dir/target-arm_mpcore+vfp_uClibc-0.9.33.2_eabi/stamp/.tools_install_yynyynynynyyyyyyyyynyyyyyyyyynyyyyynnyyynnyynnnyy' failed make[1]: *** [/home/zhangjc/openwrt-15.05.1/staging_dir/target-arm_mpcore+vfp_uClibc-0.9.33.2_eabi/stamp/.tools_install_yynyynynynyyyyyyyyynyyyyyyyyynyyyyynnyyynnyynnnyy] Error 2 make[1]: Leaving directory '/home/zhangjc/openwrt-15.05.1' /home/zhangjc/openwrt-15.05.1/include/toplevel.mk:182: recipe for target 'world' failed make: *** [world] Error 2
08-08
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅得不敢出门

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值