【问题标题】:How do I stop the GCC warning about __GXX_ABI_VERSION redefined?如何停止有关重新定义 __GXX_ABI_VERSION 的 GCC 警告?
【发布时间】:2019-03-05 17:27:20
【问题描述】:

在处理this question 中描述的相同问题时(仅针对不同的特定版本),我在我的顶级 CMakeLists.txt 文件中添加了以下内容:

add_definitions(-D__GXX_ABI_VERSION=1002)

...因为 1002 是我构建的 wxWidgets 想要的版本。好,太棒了;现在编译的程序将运行。但是现在当我执行make 时,每个编译的文件都会发出以下警告:

<command-line>: warning: "__GXX_ABI_VERSION" redefined
<built-in>: note: this is the location of the previous definition

是的,我知道我在命令行上[重新]定义了__GXX_ABI_VERSION,而且我想我知道它以前是以某种“内置”方式定义的,但我是故意这样做的。 我可以在我的 CMakeLists.txt 文件中添加一些内容来抑制该特定警告吗?我不想抑制任何其他重新定义警告;只是那个特定的。我已经将makestderr 重定向到一个文件并grep 将其重定向为“错误:”,以便从警告的大海捞针中挑选出实际的编译错误,这很痛苦......

【问题讨论】:

    标签: gcc cmake g++


    【解决方案1】:

    我认为手动更改版本不是一个好主意。你可能会得到意想不到的行为。解决问题的正确方法是真正使用预期版本而不是修补版本名称。

    但是,要回答您的问题,您可以尝试

    add_definitions(-U__GXX_ABI_VERSION=0LD) #replace 0LD by the old version
    add_definitions(-D__GXX_ABI_VERSION=1002)
    

    【讨论】:

    • 虽然我同意你谨慎的逻辑,但它似乎是一种足够广泛的建议方法,我对风险感到满意。我将尝试您特别建议的-U-ing 旧值;我用简单的-U__GXX_ABI_VERSION -D__GXX_ABI_VERSION=1002 进行了尝试,显然 -U 优先,并且代码是在根本没有定义符号的情况下构建的。
    • 担心您的建议只会导致额外的警告:&lt;command-line&gt;: warning: extra tokens at end of #undef directive。但!我刚刚确定了正确的 ABI 版本控制参数 -fabi-version=2 设置的值是 1002。因此,感谢您的警告,它敦促我找到当前方法的替代方法!
    【解决方案2】:

    感谢Julien 的推动,我调查了GCC 选项-fabi-version=... 的效果。你瞧,指定-fabi-version=2 会导致__GXX_ABI_VERSION 被定义为1002。所以,修复:

    改变

    add_definitions(-D__GXX_ABI_VERSION=1002)
    

    add_definitions(-fabi-version=2)
    

    【讨论】:

      猜你喜欢
      • 2011-12-30
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多