为什么qmake在链接时会将-Wl、O1传递给gcc,并且会损害LTO?

为什么qmake在链接时会将-Wl、O1传递给gcc,并且会损害LTO?,gcc,qmake,Gcc,Qmake,我注意到在默认版本配置中,qmake(qmake 3.1,qt 5.9.5-我的Ubuntu构建框上安装的任何东西)在链接时将-Wl,O1传递给g++。因此,链接命令行看起来像 g++ -Wl,-O1 -flto -O2 -o program program.o lib1.a lib2.a ... 其中-flto-O2是我通过QMAKE\u LFLAGS\u RELEASE传递的选项,以启用LTO 现在的问题是:为什么qmake有这个-Wl,-O1选项,它会干扰LTO?qmake通过-Wl,O

我注意到在默认版本配置中,qmake(qmake 3.1,qt 5.9.5-我的Ubuntu构建框上安装的任何东西)在链接时将
-Wl,O1
传递给g++。因此,链接命令行看起来像

g++ -Wl,-O1 -flto -O2 -o program program.o lib1.a lib2.a ...
其中
-flto-O2
是我通过
QMAKE\u LFLAGS\u RELEASE
传递的选项,以启用LTO


现在的问题是:为什么qmake有这个
-Wl,-O1
选项,它会干扰LTO?

qmake通过-Wl,O1,因为它是一个好的默认值

它不会损害LTO,因为您的-O2选项来得晚,并且会覆盖-Wl,O1

从g++的手册页:

如果使用多个-O选项(带或不带级别编号),则 最后一种选择是有效的

您可以通过指定

QMAKE_LFLAGS_RELEASE -= -Wl,-O1