GCC v12.1 关于串行编译的警告

Dar*_*deX 20 c++ gcc g++ gcc-warning gcc12

我今天(2022 年 5 月 12 日升级了整个arch Linux系统。也从 升级为。我尝试通过以下命令使用(编译器集合的一部分)编译我的一些程序:gccv11.2v12.1g++gcc

g++ -O3 -DNDEBUG -Os -Ofast -Og -s -march=native -flto -funroll-all-loops -std=c++20 main.cc -o ./main
Run Code Online (Sandbox Code Playgroud)

程序完美编译并正常运行,没有任何错误,但我收到警告:

lto-wrapper: warning: using serial compilation of 2 LTRANS jobs
Run Code Online (Sandbox Code Playgroud)

但是,当使用它编译同一程序时,v11.2会产生零个错误和警告

我的问题:

  • 这个警告是什么意思?
  • 我怎样才能解决这个问题?
  • 出现此警告是否是由于gcc版本升级所致v12.1

这是g++我机器上的配置:

$ g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/12.1.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-bootstrap --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --with-linker-hash-style=gnu --with-system-zlib --enable-__cxa_atexit --enable-cet=auto --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-multilib --enable-plugin --enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch --disable-werror --with-build-config=bootstrap-lto --enable-link-serialization=1
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.1.0 (GCC) 
Run Code Online (Sandbox Code Playgroud)

Jak*_*ark 25

显然这是该选项最近的变化-flto。经过一番搜索,我找到了这个邮件对话

同样,如果人们只使用 -flto 并且自动检测什么也找不到:

警告:使用 N 个 LTRANS 作业的串行编译 注意:有关如何使用并行编译,请参阅 http://....

[...]

也就是说,教导用户而不是事后猜测并最终把事情搞砸。恕我直言,只有 jobserver 模式可以安全地自动使用。

所以这是关于-flto正确使用选项的问题。我无法在我的系统上轻松获得 GCC 12,因此无法亲自尝试,但您可以尝试-flto=1-flto=auto消除该警告。

无论如何,这个警告似乎是无害的。它只是告诉您 GCC 使用 2 个并行线程来进行链接时间优化。

GCC 手册中详细描述了其确切的语义和效果-flto(以及其他优化选项)。顺便说一句,您不应该像在命令行中那样发送垃圾邮件优化选项。例如,指定多个选项将仅具有最后一个选项的效果。除非您确切地知道自己在做什么并仔细阅读了手册,否则只要坚持使用就可以了。-O...-O3

  • 这是截至 2023 年 4 月下旬讨论该问题的另一个线程,显然 auto 和 =N 选项尚未修复警告 https://github.com/nanoframework/Home/issues/1284 (3认同)