问题标签 [lto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1422 浏览

android - 带有clang的Android上的LTO - 它应该工作吗?

我有一个由GCC. 现在我试图用 编译它clang,它可以工作,除了一件事:只要我添加APP_CFLAGS += -flto(它与 一起工作GCC),链接器就会对每个.o文件都说“无效字符”,然后退出。那么,我可以使用 clang 启用 LTO 吗?如果可以,那怎么办?

这是最新的 NDK R10e 和 clang 3.6。

0 投票
1 回答
84 浏览

gcc - 如何在 gcc 中间表示中保存树?可能吗?

我想以二进制形式将一棵树(特别是树的类型)保存在一个文件中,并且我需要在其他编译单元中加载这棵树。例如:

我有一个带有 2 个功能的 main.c:

我想保存结构的类型(myTypeStruct)并将其加载到另一个涉及 test.c 的编译单元中:

使用 gcc 插件,我想加载类型并构建该类型的变量以将 test.c 转换为:

我知道是指向tree_node的指针,而 tree_node 是结构的联合。问题是一棵树与它有关系,并且有一系列难以理解的结构。在构建特定类型的变量时,我需要知道哪些数据需要树。

PD:关于 LTO 如何做这样的事情的文档不足。PD2:对不起我的英语

0 投票
1 回答
234 浏览

c++ - LTO 优化负面影响并找到最佳解决方案

我有带闪存的 MCU(像往常一样)。链接器将 .struct_init、.struct_init_const、.struct_not_init 段放置到属于闪存段 20 的地址。它在链接描述文件中被硬编码。

考虑以下测试代码:test.h

测试.cpp

主文件

我想确保 param1_ 变量的初始化将导致从闪存中获取数据。因为可以使用引导加载程序更改闪存部分 20 中的数据(在主固件未运行时)。

问题是:LTO(和其他优化)是否可以丢弃从闪存中获取的数据并仅替换已知值,因为它们在链接时由于初始化而已知。什么方法更好?如果 LTO 可以替换值 - 那么应该避免初始化吗?我知道 volatile 可以提供帮助,但在这种情况下真的需要它吗?

代码示例显示了访问和初始化数据的不同方法。not_init 版本似乎是最好的,因为编译器不能替代任何东西。但是有一些默认参数是个好主意,所以如果可以使用,我更喜欢初始化版本。

应该选择什么方法?

目前我正在使用 GCC 4.9.3,但这是关于任何 C/C++ 编译器的一般问题。

0 投票
4 回答
26151 浏览

cmake - 如何使用 CMake 启用链接时间优化 (LTO)?

我有最新的 cmake 构建并尝试所有构建配置(Debug、MinSizeRel、RelWithDebugInfo、Release、General)我在生成的 makefile 中看不到任何地方(文本搜索)字符串-lto,所以或者该功能仍然不存在,或者它需要手动转换(在这种情况下,文本搜索 LTO 或链接时间优化)在文档上没有给出任何结果,所以我在官方文档中看不到启用 LTO 的方法。

有没有办法在不指定手动标志的情况下“全局”启用 LTO(对于所有编译器),而这些标志在最坏的情况下只能由 GCC 支持?

0 投票
1 回答
4756 浏览

cmake - CMake、静态库和链接时间优化

我正在尝试使用 cmake 和 g++ 创建具有链接时间优化的静态库。

但是当运行典型

我收到以下错误:

link.txt 文件包含以下命令:

据我了解,ar --help应该-flto -fwhole-programlibmylib.a第一行之前运行。但我不知道如何强制 CMake 把它放在那里。

我的假设正确吗?我该如何解决这个问题?

编辑:我想补充一点,我对使用 LTO 完全陌生,所以如果将它用于静态库没有意义,请告诉我。

0 投票
1 回答
20766 浏览

gcc - 使用 flto 的要求

如果我想编译我的项目,-flto构建 gcc 是否足够,--enable-gold或者我还需要构建 gold 并用它替换 ld?我还需要其他标志吗?即我正在这样做

0 投票
1 回答
3844 浏览

c++ - Mingw x64 Windows:处理 lto 对象所需的插件

当我尝试使用 64 位 mingw (x86_64-5.1.0-posix-seh-rt_v4-rev0) 编译我的项目时,我收到了消息:

对于每个源文件。然而,当我使用 32 位 mingw(i686-5.1.0-posix-dwarf-rt_v4-rev0) 编译时,一切正常。

我的标志是:

我尝试添加 -fuse-linker-plugin 和 -fno-use-linker-plugin,但没有帮助。我的操作系统是 64 位 Windows 10。如果重要的话,我会使用 CLion 和 CMake,尽管它不应该。我该如何解决?

0 投票
0 回答
3195 浏览

c++ - 带有 LTO 的 binutils 和 gcc

我已将 binutils-2.25.1 安装到 /usr/local/binutils-2.25.1,配置为

我想构建 RPM 包 -支持 LTO 的 gcc,它使用来自 /usr/local/binutils-2.25.1 的链接器ld 。

我尝试:

安装此软件包后,我尝试:

并得到:

但是, /usr/local/binutils-2.25.1 中的ld具有插件支持

此外,来自 /usr/local/gcc-4.9.3 的 gcc-{ar,nm,ranlib} 具有 --plugin 支持

需要你的帮助,伙计们

UPD 我设法解决了这个问题。刚换

并且还添加了

% install开始

gcc-4.9.3/lto-plugin/configure脚本写不正确!!!

0 投票
0 回答
86 浏览

c++ - 启用链接时间优化时链接失败

我有一个(大)wxWidgets 项目,它在更高的优化级别也能顺利编译。

现在,我在此项目的设置中启用了用于构建对象的全程序优化 (/GL) 和链接时间代码生成 (/LTCG)。这会导致无法解析的外部引用 - 无法再找到我再次链接的外部 wxWidgets 库的功能。

那么这是 Visual Studio 的 LTO 中的一个已知错误吗?任何想法如何解决它或可能导致这种情况?

谢谢!

0 投票
1 回答
654 浏览

plugins - LLVM LTO Pass 插件的可能性?

我想知道目前是否可以在 LTO 时间安排一个“外部”(.so/.dylib)LLVM 插件(模块)通过?想要这个的原因是我想添加一个模块间优化。

我也找到了这个话题;如何在 LLVM 中编写自定义模块间传递? 但是一个单独的工具对我来说不是一个选择。

谢谢