问题标签 [gcc11]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
40 浏览

c++ - 模板化 operator=() 和重载决议

考虑以下代码片段

尝试使用 GCC11.1 (with -std=c++2a) 进行编译时,它会尝试选择编译器生成的operator=,它被删除并失败。以前的 GCC 版本成功地构建了这个代码。

据我了解,隐式生成的deleteoperator=是不可行的,所以应该选择算子模板。是 GCC 错误还是我遗漏了什么?

0 投票
1 回答
48 浏览

c - 警告:“__builtin_snprintf”输出可能在最后一个格式字符之前被截断 [-Wformat-truncation=]

我在 gcc 8 上看到了这个警告。如何在不使用 -Wformat-truncation 选项的情况下防止这种情况发生?

0 投票
0 回答
64 浏览

c - 警告:获取“结构详细信息”的打包成员的地址可能会导致指针值未对齐 [-Waddress-of-packed-member]

警告:获取“结构详细信息”的打包成员的地址可能会导致指针值未对齐 [-Waddress-of-packed-member]

GCC 在 >9 版本中给出此警告。如何在不使用 [-Wno-address-of-packed-member] 的情况下消除此警告

0 投票
1 回答
39 浏览

c - 在 `gcc` 11 上,如何在使用 `--coverage` 时更改 `.gcno` 文件的前缀,以使它们符合 `gcov` 的预期?

我正在为我的 C 项目添加代码覆盖率。我正在遵循的过程是这样的:

当我gcc在 version 上使用时10.3.0,这一切都按预期工作,没有问题。但是,当使用gccwith version11.1.0时,main.gcnomain.gcda文件都有不同的名称,这会破坏流程,如下所述。

使用gcc --coverage main.c产生两个文件,a.outa-main.gcno. 然后运行可执行文件./a.out创建一个新文件a-main.gcdaa-注意覆盖文件上的前缀。运行下一个命令gcov main.c时,出现以下错误:

因为它正在寻找文件main.gcnomain.gcda,但找不到它们。

为什么新版gcc会这样?我在网上阅读的所有内容都假定编译器的输出应该与gcov在同一源文件上运行时同步。我找不到任何方法来更改覆盖文件的输出名称。

如果有帮助,我还注意到a-前缀取决于输出名称。因此,如果指定了输出名称 ( gcc --coverage main.c -o test),则覆盖文件将使用该名称作为前缀 (test-main.gcnotest-main.gcda)。

我也尝试过手动重命名文件以删除前缀,gcov似乎对此很满意。问题是我正在尝试自动化该过程,并且我想要一种比尝试猜测编译器用于覆盖文件的输出名称更强大的方法。

作为参考,我也在使用gcovon version 11.1.0。我不清楚这是否与gcc同一个版本有关。

0 投票
0 回答
27 浏览

debian - 编译模块之前 Kali-Linux 中的 VMWARE 错误

当我打开 vmware 并单击服务器模块的安装按钮时出现以下错误,必须编译并加载到正在运行的内核中

错误日志:pastebin 链接

以下事情我试图修复错误但仍然得到同样的事情。

  1. 尝试从 debian 站点安装 gcc-11,它已显示最新和已安装的版本。

    wget http://ftp.us.debian.org/debian/pool/main/g/gcc-11/gcc-11_11.2.0-16_amd64.deb
    apt install ./gcc-11_11.2.0-16_amd64.deb

  2. 尝试重新安装 gcc-11,它也安装没有问题,但 vmware 问题仍然存在。
    apt install --reinstall gcc-11

  3. 尝试手动编译,但我也收到错误Link

0 投票
1 回答
44 浏览

c++ - GCC 11.x 恼人的解析 + 不一致的错误(重新声明为不同的符号类型),它是 GCC 错误吗?

以下代码从 GCC 4.7.1 编译到但不包括 GCC 11.1没有问题:

在 GCC 11.x 上它失败了:

但是“重新声明为不同类型的实体”的错误对我来说似乎很奇怪:除了不明确的解析可能性,范围是不同的。此外,这些测试都在自 4.7.1 (包括 11.x) 以来的所有 GCC 版本上编译,即使 AFAIK 每个都重新声明SomeValue为“不同类型的实体”:

作为一个相对不那么荒谬的示例,此代码从 11.x 开始也以类似的方式失败:

尽管在这种情况下,它前面有一个在 11.x 之前也不存在的 vexing-parse 警告(警告在这里但不在上面的事实是有道理的,警告在 11 之前没有出现的事实.x 是有趣的一点):

可是等等!还有更多!

这段代码——由于与上面相同的解析歧义,我预计在 11.x 上会失败——在所有这些版本的 GCC(包括 11.x)上编译得很好:

没有警告或任何东西。

所以...这里发生了什么事?为什么在这些特定情况下“重新声明为不同类型的实体”只是一个问题SomeValue,并且仅从 GCC 11.1 开始,为什么不会closure(SomeValue)()遇到与SomeClass(SomeValue)()?

还有什么变化?GCC在这里正确吗?它是 GCC 11.x 中引入的新错误吗?或者也许是最终在 11.x 中修复的旧错误?或者根本不是一个错误,而其他的东西发生了变化?

我正在努力想出一个一致的解释。