GCC v12.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) 

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

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

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

[…]

也就是说,教用户而不是事后猜测和最终炸东西。IMHO只有jobserver模式是安全的自动使用。

所以这是关于正确使用-flto选项。我无法在我的系统上轻松地获得GCC 12,因此无法自己尝试,但您可以尝试-flto=1-flto=auto来摆脱警告。

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

-flto的确切语义和效果(连同其他优化选项)在GCC手册中有详细描述。顺便说一下,您不应该像在命令行中那样使用垃圾优化选项。例如,指定多个-O...选项只会产生最后一个的效果。除非你确切地知道你在做什么并且仔细阅读了手册,只要坚持使用-O3,你就会没事的。

相关内容

  • 没有找到相关文章

最新更新