问题标签 [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 投票
0 回答
1019 浏览

c++ - 在 (K)ubuntu 20.04 上使用 GCC11

我想使用一些在尚未发布的 GCC-11 中实现的新 C++20 函数。我尝试在 Ubuntu 20.04 上安装该软件包,但正如预期的那样,它还不存在。网络搜索也没有提供任何有用的信息。

有没有办法在 Ubuntu 20.04 上使用 GCC-11?

0 投票
4 回答
17783 浏览

ubuntu - gcc-11 何时会出现在 Ubuntu 存储库中?

GCC 11.1 终于在昨天发布了。但是,现在它只能从源代码构建,所以我想知道我们什么时候可以得到它apt

0 投票
2 回答
169 浏览

c - 如何在 GCC 11.1 -mgeneral-regs-only' -Wattributes 在 ARM 架构的中断上下文中禁用警告?

我已将 GCC 编译器从 10.3 更新到 11.1。我用它来编译带有 FPU 的目标 CPU cortex-m4。

在我的代码中,有很多函数标记为中断,__attribute__((interrupt))例如:

不幸的是,更新后,编译器已经开始为中断属性生成警告

这里出现的问题是如何关闭此警告。我不想禁用-Wattributes我只想针对这种特殊情况禁用警告。

还有什么为什么 GCC 试图禁止在中断服务程序上使用 FPU 上下文?它在 ARMv7m 架构的中断上下文中是允许的,并且在硬件中支持。

我想这是GCC中的一个错误?

0 投票
0 回答
46 浏览

c++ - 如何通过编译标志包含头文件?

我已经切换到 GCC 11。版本 11 的一个变化是一些 C++ 标准库头文件已更改为不再包含它们确实需要依赖的其他头文件。(此处称为“标题依赖项更改”:https ://gcc.gnu.org/gcc-11/porting_to.html )。

现在,当我想编译一个用 GCC 10 编译得很好的大型 3rd 方库时,由于缺少头文件包含,我得到了编译错误。作为一种快速解决方法,我想在编译该库时自动包含移植说明中提到的四个头文件 <limits>, <memory>, <utility><thread>但我不想修补它的源代码。

那可能吗?是否可以通过传递一些编译标志,因为这很容易在构建过程中修改?或者是否有另一种简单的解决方法来丢失包含文件?

0 投票
1 回答
178 浏览

clang - 主流编译器是否支持 OMPT?

5.0 版的 OpenMP 规范定义了OMPT接口以允许外部工具查询 openmp 运行时。

我想试一试,但我对主流编译器实际上如何支持这一点感到非常困惑。

  • GCC-11 声称已经扩展了对 openmp 5.0 的支持,但是关于 OMPT,我找不到相应的ompt.h头文件(在我的例子中,Ubuntu 软件包libgcc-11-dev提供了omp.h)。

  • clang-12 确实提供了ompt.h(package ) 但是示例程序libomp-12-dev的编译失败,第一个错误是并且确实在.unknown type name 'ompt_invoker_t'ompt.h

目前的支持状态对我来说非常不清楚。我找不到 GCC 的准确状态,而 clang 提供了这些信息https://clang.llvm.org/docs/OpenMPSupport.html从中我无法弄清楚大部分完成的背后是什么。

谁能帮我找到最新信息或任何提示?

0 投票
3 回答
491 浏览

c++ - C++ 模块从另一个模块转发声明实体

我最近一直在尝试使用 GCC 11 将代码库转换为 C++20 模块。但是,我陷入了以下情况。首先,这是使用标题的方法:

A.cpp

(这里Bh的内容不重要)

需要注意的是 B 的前向声明。不是每个使用 A 的人都应该关心 B,所以我使用前向声明来阻止重新编译的发生。使用标头,这种情况非常有效。

问题在于尝试将此代码转换为模块时。主要问题是实体与声明它们的模块相关联,因此在 Ah 中进行前向声明是不可能的。我尝试在全局模块中进行前向声明,但编译器仍然抱怨 B 的定义与其声明位于不同的模块中。我还尝试了第三个模块,它只包含 B 的前向声明,但这仍然是在两个不同的模块中声明和定义 B。所以,我的主要问题是:我怎样才能从模块之外的模块中转发声明一些东西? 我也会对最终产生相同效果的方式感到满意:当 B 更改时,A 的用户不需要重新编译。

在搜索时,我发现一些地方在谈论类似的情况,但由于某种原因它们都不起作用。他们没有工作的原因:

  • 有人说有一个带有前向声明的模块。正如我上面所说,这不起作用。
  • 有人说要使用宣布的所有权声明。但是,它们已从最终的 C++ 标准中删除。
  • 有人说使用模块分区。但是,这仅在 A 和 B 在同一模块中时才有效。A 和 B 不应该在同一个模块中,所以这不起作用。

编辑:作为对评论的回应,以下是我尝试过的一些事情的详细信息:

尝试 1:在 A.mpp 中转发声明 B

A.mpp

B.mpp

A.cpp

执行此操作时,gcc 错误

尝试 2:在新模块中前向声明

B_decl.mpp

A.mpp

B.mpp

A.mpp

执行此操作时,gcc 错误

尝试 3:在标头中前向声明,在模块中定义

B_decl.h

A.mpp

B.mpp

A.cpp

执行此操作时,gcc 错误

0 投票
0 回答
76 浏览

c++ - 在 C++ 中编译 sio_client 和 semaphore

我可以编译一个只使用信号量的程序或一个只使用 sio_client websocket 库的程序。但是,当编译一个包含这两个库的简单程序时,我会处理我什至不知道如何描述的巨大编译问题。

如果我用 <sio_client.h> 替换包含“socket.io-client-cpp/src/sio_client.h”,则编译器找不到 sio_client 库,并且如果我手动包含库路径,因为它在代码中,误差比圣经还大。

需要指出的是,我根据库本身包含的 README.md 进行了 sio_client 安装过程,并且我已经在其他上下文中使用过它,效果很好。

要编译这个程序,我使用以下命令:

错误的开始:

0 投票
1 回答
41 浏览

c++ - arm64 debian 上的 gcc-8 是否忽略友元运算符

我想比较两组对象。对于相同的代码,我在不同的机器上得到 2 个不同的输出。代码是用两个不同的编译器编译的。在x86-64机器上我使用gcc-11,在aarch64 ( raspberry pi4 ) 机器上我使用gcc-8。我必须在树莓上使用gcc-8 ,因为它在官方存储库中。

有谁知道为什么会这样?我错过了什么吗?

x86-64输出。

aarch64输出


问题在这里:

共享指针有自己的比较运算符,用于比较存储的指针。还有owner_less比较拥有的指针(一个特殊构造的共享指针可以拥有一个对象但指向另一个对象,例如它可以指向拥有对象的成员)。

如果你需要比较指向的对象,你应该写一个比较器来做这件事,并将它作为第二个模板参数传递给集合。像:

0 投票
1 回答
36 浏览

c++ - Boost 概念检查警告

鉴于此代码使用 boost 1.75 / gcc 11

我收到很多警告,例如 boost concept failed ...

更多日志:

https://godbolt.org/z/6Ge5vxYrc

如果我没有能力升级提升,如何解决这个问题

0 投票
2 回答
273 浏览

c - gcc-11 不正确可能会在未初始化的情况下使用,这似乎很难避免

我发现了一个特定的使用模式,它看起来完全没问题,以前没有编译器抱怨过。现在它使用 gcc-11 发出警告:下面是一个接近最小的示例。另存为t.c并使用gcc-11 -O2 -Wall -c t.c.

编译结果:

现在有一些观察

  • 调用 strlen(s) 而不是 f(s) 不会导致警告。请注意,两者都接受const char*(签入/usr/include/string.h
  • 如果我删除 的const声明中的f(),问题也会消失。
  • 调用 usingf((const char*)s)也无济于事。
  • 像 in 一样初始化 schar *s = NULL也无济于事(无论如何我都不希望这样做,因为它隐藏了有关未初始化变量的正确警告)。

我了解到,声称某事是 GCC 错误通常被正确地证明是错误的。所以我首先在这里检查我缺少什么。

编辑由于我无法在评论中添加代码,因此这里是反驳部分声明的代码。这编译得很好: