You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在LEDE SDK编译Reaver的Makefile中添加CFLAGS?

在LEDE SDK中为Reaver添加调试编译选项的正确方法

嘿,针对你在编译Reaver时想添加CFLAGS="-O0 -g3"的问题,不能只把它加到CONFIGURE_ARGS,因为LEDE/OpenWrt的构建系统有专门的变量来管理编译选项,直接修改CONFIGURE_ARGS可能会被系统默认的编译参数覆盖,或者无法正确生效。下面是具体的解决方法:

正确的修改方式

LEDE构建系统使用TARGET_CFLAGS变量来传递编译选项给目标包的编译过程。你需要在Makefile中合适的位置设置这个变量,步骤如下:

  1. 找到include $(INCLUDE_DIR)/package.mk这一行,在它之后添加编译选项的设置:

    include $(INCLUDE_DIR)/package.mk
    
    # 移除默认的优化级别(比如-O2),替换为-O0并开启调试符号
    TARGET_CFLAGS := $(filter-out -O%,$(TARGET_CFLAGS)) -O0 -g3
    
    CONFIGURE_PATH:=src
    MAKE_PATH:=src
    CONFIGURE_ARGS += --enable-savetocurrent
    
  2. 如果你只是想追加调试选项而不完全覆盖默认优化(不推荐调试场景),可以用+=

    TARGET_CFLAGS += -O0 -g3
    

    不过这种情况下如果系统默认有-O2,编译器可能会优先使用最后出现的优化选项,但为了确保调试环境的纯净,更建议用第一种方式过滤掉原有优化级别。

为什么不推荐加在CONFIGURE_ARGS里?

LEDE的构建系统会自动把TARGET_CFLAGSTARGET_CPPFLAGS等变量传递给configure脚本的参数,如果你手动在CONFIGURE_ARGS里加CFLAGS="-O0 -g3",可能会和系统传递的参数冲突,导致你的设置不生效。而直接修改TARGET_CFLAGS是符合OpenWrt/LEDE包构建规范的做法,能确保参数被正确传递到编译流程中。

修改后的完整Makefile关键片段

include $(INCLUDE_DIR)/package.mk

# 设置调试编译选项
TARGET_CFLAGS := $(filter-out -O%,$(TARGET_CFLAGS)) -O0 -g3

CONFIGURE_PATH:=src
MAKE_PATH:=src
CONFIGURE_ARGS += --enable-savetocurrent

define Package/reaver
  SECTION:=net
  CATEGORY:=Network
  SUBMENU:=wireless
  TITLE:=Efficient brute force attack against Wifi Protected Setup
  URL:=https://github.com/t6x/reaver-wps-fork-t6x
  DEPENDS:=+libpcap
endef

这样修改后,重新编译Reaver就能得到带有调试符号、无优化的二进制文件了。

内容的提问来源于stack exchange,提问作者Vido

火山引擎 最新活动