【问题标题】:What is lto1.exe?lto1.exe是什么?
【发布时间】:2020-02-03 16:00:01
【问题描述】:

当您检查 mingw 时,您会发现 c 编译器 cc1.exe(有趣的是,在 9.2 中大小增加了几乎 25 MB)cc1plus.exe 是 c++ 编译器(相同大小) collect2.exe 是链接器(afiak)螺母什么是lto1.exe?

我用谷歌搜索了一个多小时,但没有找到这方面的信息.. 有没有关于这方面的好信息可供阅读? tnx

ps。我怀疑它可能与链接时间优化有关,但没有发现更多关于它的信息,我想了解更多

还有一个问题 gcc.exe 是什么 g++.exe 和 mingw32-gcc.exe 那么 mingw32-g++.exe 是什么

我需要更多信息,越多越好,tnx

【问题讨论】:

    标签: gcc mingw mingw-w64


    【解决方案1】:

    这不是 mingw / Windos 特定的;它是 GCC 的一个特性/组件。

    lto1.exe 是什么?

    这是 lto 编译器 :o)。 lto 基本上是使用-flto 编译时编写的字节码,其中“lto”或“LTO”代表“链接时优化”。

    这些优化不是由链接器执行,而是由编译器在链接时间在所有模块的(字节)代码可用时执行全局优化。流程如下:

    1. C/C++ 编译器(cc1 用于 C 或 cc1plus 用于 C++)将 C/C++ 编译为字节码并将其写入程序集文件 *.s
    2. 汇编程序由汇编程序像往常一样汇编成目标代码*.o。 lto-code 在专门的部分中提供。
    3. 在链接时,链接器(插件)回调编译器并按要求提供所有对象和库。字节码被提取出来,lto1 编译器将其编译成最终的机器码。
    4. 最终的机器代码由汇编器汇编成目标代码。
    5. 链接器将这些对象链接/定位到最终的可执行代码。

    您会在 lto 部分中看到带有 -save-temps 的字节码,并查看保存的 *.s 文件。最新版本的 GCC 甚至不用编写汇编代码。他们只是在编写 lto 代码。要查看汇编代码,请指定 -ffat-lto-objects。但是请注意,这不是最终代码。

    有趣的是,在 9.2 中大小增加了将近 25 MB

    GCC 可执行文件的大小不仅取决于 GCC 主要版本,还很大程度上取决于用于构建 GCC 的编译器的优化程度。

    [编辑] 有关 LTO 的一些信息可以在 GCC wiki for LTO 上找到。但是请注意,此页面不再处于活动状态。 gcc-help@gcc.gnu.org mailing list 是所有开发人员所在的地方。还有一个关于LTO in the GCC internals的部分。

    【讨论】:

    • 你可能有一些链接吗?
    • 在上面的Edit 中添加了更多链接。你到底在找什么? lto代码的结构是怎样的?如何使用 LTO?编译器源?
    • 我想知道它现在是什么,我理解它不是链接器,而是与语言无关的编译器“后端”?你知道 gcc.exe 和 mingw32-gcc.exe 是什么吗?
    • lto1 是一个 lto 编译器,就像 cc1 是一个 C 编译器和 cc1plus 是一个 C++ 编译器一样。 GCC 有不同的前端,即读取/解释一种输入语言并将生成的内部表示提供给中间端的代码(独立于语言和目标的传递)。 lto前端就是其中之一。不同之处在于 lto 是编译器产生的字节乱码,而适用于 C/C++ 的编译器通常在预处理之后读取程序员编写的文本文件。
    • gcc 可执行文件本身并不是一个编译器,它只是一个驱动程序,它调用诸如预处理器、编译器本身、汇编器 (as) 和链接器 (ld) 等子命令,具体取决于关于选项和文件扩展名。您会看到使用 gcc -v ... 运行的子命令。
    猜你喜欢
    • 2011-11-08
    • 1970-01-01
    • 2017-07-26
    • 2011-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多