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

问题描述 投票:0回答:1

我今天(2022 年 5 月 12 日)升级了整个 arch linux 系统。 gcc

也从
v11.2
升级为
v12.1
。我尝试通过以下命令使用 
g++
gcc
编译器集合的一部分)编译一些程序:

g++ -O3 -DNDEBUG -Os -Ofast -Og -s -march=native -flto -funroll-all-loops -std=c++20 main.cc -o ./main
程序编译完美,运行正常,没有任何错误,但我收到警告:

lto-wrapper: warning: using serial compilation of 2 LTRANS jobs
但是,当使用 

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)
    
c++ gcc g++ gcc-warning gcc12
1个回答
28
投票
这是由于

-flto

 选项的更改所致,该选项是由 
this commit
gcc 11.4 中引入的。另请参阅此邮件对话

同样,如果人们只使用 -flto 和自动检测 什么也没发现:

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

[...]

也就是说,教导用户而不是事后猜测,最终 炸毁东西。恕我直言,只有 jobserver 模式是安全的 自动使用。

所以这是关于正确使用

-flto

 选项的问题。您可以尝试
-flto=auto
来消除警告。

如果您通过 MinGW 或 MSYS2 在 Windows 上使用 gcc,那么您可能还需要将

MAKE

 环境变量设置为 
mingw32-make
 和/或传递 
-save-temps
 选项以消除所有警告。

无论如何,这个警告是无害的。它只是告诉你 GCC 仅使用单个线程来进行链接时间优化,因此它会很慢。

-flto

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

© www.soinside.com 2019 - 2024. All rights reserved.