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 如何设置永久环境变量。

相关推荐

  1. 【rust编译错误解读

    2024-03-21 20:50:01       19 阅读
  2. No ‘ChromeSansMM’ font 错误解决

    2024-03-21 20:50:01       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-21 20:50:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-21 20:50:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-21 20:50:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-21 20:50:01       20 阅读

热门阅读

  1. C语言例3-40:减少不必要的数据类型转换的例子

    2024-03-21 20:50:01       20 阅读
  2. 动态规划 Leetcode 139 单词拆分

    2024-03-21 20:50:01       16 阅读
  3. pycharm专业版破解亲测可用记录一下

    2024-03-21 20:50:01       18 阅读
  4. 安卓面试题多线程 121-125

    2024-03-21 20:50:01       20 阅读
  5. C 练习实例83-求0—7所能组成的奇数个数

    2024-03-21 20:50:01       21 阅读
  6. 【vue自定义指令touch-move】

    2024-03-21 20:50:01       15 阅读
  7. 收集一些PostgreSQL的题目

    2024-03-21 20:50:01       18 阅读
  8. VHDL设计实现数字扫雷游戏及仿真

    2024-03-21 20:50:01       13 阅读
  9. 【ceph】配置 ceph dashboard 详细配置过程

    2024-03-21 20:50:01       15 阅读
  10. Apache Spark 的基本概念和在大数据分析中的应用

    2024-03-21 20:50:01       16 阅读