NS3编译错误 all warnings being treated as errors 解决方法

网上有很多同类的帖子,但解决方法都很奇怪,所以这里我从原理上稍微说一下。赶时间可以直接看看以下帖子:

NS3编译错误cc1plus: all warnings being treated as errors解决方法

交叉编译驱动和应用出现警告提示错误“cc1:all warnings being treated as errors”解决方法

本质问题是 waf 在生成配置文件的时候默认添加了 “-Werror” 编译器标记(网上说是 linux 内核从5.15之后构建将默认启用 “-Werror” 编译器标记),编译时 warning 被当作 error 处理。而如果我们要关掉这个标记,只需要去掉这个 -Werror 标记即可。

但网上就很多说法都是说把 NS3 根目录下的 build 文件夹下的 c4che/_cache.py 文件中的 -Werror 标记给去掉,这其实是很费解的一个行为,因为 build 本身就是编译配置文件,是通过 ./waf configure 来生成的,而你在生成之后修改这个 build 的配置文件,实际上是非常不优雅的一件事。当你因为一些事情改了 wscript (例如配置第三方库等)之后,重新执行 ./waf configure,你之前删掉的 -Werror 又改回去了。

实际上我们可以在编译时额外给一个 -Wno-unused 选项即可,而在 NS3 中,由于我们是通过 waf 编译的(并不是直接 gcc / 通过 Makefile 编译),因此需要修改 waf 的文件夹 wscript 来修改,即 NS3 根目录下的 wscript。

其中有两种修改方法,第一种是直接在 def configure 函数中对编译环境进行修改,即添加如下代码:

def configure():
	... 
    conf.env.append_value("CXXFLAGS", ["-Wno-error"]);
    ... 

实际上就是在编译时添加了一个新的 CXXFLAGS,即 -Wno-error。执行以上操作之后,一定要记得 ./waf clean 清楚 build 目录下的文件,然后通过 ./waf configure 重新生成 build 编译配置,最后再通过 ./waf build 编译即不会出现上述错误。

第二种则是观察到,在 def configure 函数的第 938-946行有如下代码:

def configure():
	... 
    # append user defined flags after all our ones
    for (confvar, envvar) in [['CCFLAGS', 'CCFLAGS_EXTRA'],
                              ['CXXFLAGS', 'CXXFLAGS_EXTRA'],
                              ['LINKFLAGS', 'LINKFLAGS_EXTRA'],
                              ['LINKFLAGS', 'LDFLAGS_EXTRA']]:
        if envvar in os.environ:
            print("honghong",envvar,os.environ[envvar]);
            value = shlex.split(os.environ[envvar])
            conf.env.append_value(confvar, value)
    ... 

很显然,其含义是把环境变量 “CXXFLAGS_EXTRA” 的内容也添加到 “CXXFLAGS” 这个变量下,作为当前的运行环境。因此更为优雅的方式是在执行 ./waf configure 之前(因为这一段代码是写在 def configure 下的,本质上就是 ./waf configure 时候运行的内容),先在 shell 中把环境变量 CXXFLAGS_EXTRA 的值赋值为 -Wno-error,即在 shell 中执行如下指令:

export CXXFLAGS_EXTRA="-Wno-error"

这样在 ./waf configure 生成的编译配置文件(build 目录下的内容)就不会包含 -Werror 选项了,因此也不会出现上述提到的错误。当然这种修改环境变量的方法当前终端关掉了该环境变量也就没了,如果希望设置永久环境变量则可以把该指令写入到 .bashrc 中,这里就不展开介绍了,可以自行百度:Linux 如何设置永久环境变量。

  • 21
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值