【问题标题】:gcc mismatched-tags option giving `unrecognized command line option`gcc mismatched-tags 选项给出“无法识别的命令行选项”
【发布时间】:2021-03-09 16:17:04
【问题描述】:

我试图在 gcc 上激活选项 -Wmismatched-tags(检测不一致的类/结构声明,这可能在使用前向声明时发生),但在 Ubuntu 上我得到了

c++: error: unrecognized command line option '-Wmismatched-tags'

我的 gcc 版本:

# gcc --version
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.

看这里好像集成在 gcc 4.9.0 中 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61339

是我做错了什么,还是该选项实际上不再可用?

我知道Can GCC produce struct/class name mismatches like VS?,但答案是 10 年前,我希望在此期间情况有所改善。

背景:我在一个项目中需要这个,我们也使用 clang 构建,并且这些不一致被视为错误。

【问题讨论】:

    标签: gcc compiler-warnings


    【解决方案1】:

    看这里好像集成在 gcc 4.9.0 中 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61339

    其实不然。它是在 2014 年报道的,但正如 OP 在 #5th post:

    我不能代表 MS,但我发布的原始警告是产生的 铿锵声。它确实似乎担心标签不匹配。

    在 gcc 中 -Wmismatched-tags 仅在 2019 年 12 月引入,并且 成为 GCC 10 版本的一部分:

    $ git describe e8f1ade269a39ea86a76a2440818e1512ed480ee
    basepoints/gcc-10-5517-ge8f1ade269a
    

    幸运的是,这些天我们有 docker 和官方 GCC 版本 正式发布为 docker 镜像:

    $ docker search gcc
    NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    gcc                                The GNU Compiler Collection is a compiling s…   587                 [OK]
    (...)
    

    所以你可以这样做:

    docker run --rm -it gcc
    

    然后将源目录挂载到 docker 容器中,或者 使用TRAMP integration for docker containers 或任何其他 将代码放入容器并在其中使用最新的 gcc 的首选工具:

    root@53d309d5d619:/# g++ --version
    g++ (GCC) 10.2.0
    Copyright (C) 2020 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    root@53d309d5d619:/# g++  hello.cpp  -o hello -Wmismatched-tags
    

    【讨论】:

    • 实际上有一个适用于 Ubuntu 的 gcc-10 包,它确实带有 10.2!现在我必须弄清楚如何使它成为默认编译器,这个最近的指南应该可以帮助linuxconfig.org/…
    • Docker 在这里还有一个巨大的优势——它可以用来创建一个可移植的开发环境。不是每个人都使用 Ubuntu(例如我是 Slackware 用户),有些人根本不使用 Linux(实际上,Windows 和 MacOS 在桌面上可能更受欢迎,甚至在开发人员中也是如此)。
    猜你喜欢
    • 2020-10-06
    • 2021-11-24
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 2013-05-26
    • 2020-02-03
    • 2021-10-04
    • 1970-01-01
    相关资源
    最近更新 更多