问题标签 [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.
android - 带有clang的Android上的LTO - 它应该工作吗?
我有一个由GCC
. 现在我试图用 编译它clang
,它可以工作,除了一件事:只要我添加APP_CFLAGS += -flto
(它与 一起工作GCC
),链接器就会对每个.o
文件都说“无效字符”,然后退出。那么,我可以使用 clang 启用 LTO 吗?如果可以,那怎么办?
这是最新的 NDK R10e 和 clang 3.6。
gcc - 如何在 gcc 中间表示中保存树?可能吗?
我想以二进制形式将一棵树(特别是树的类型)保存在一个文件中,并且我需要在其他编译单元中加载这棵树。例如:
我有一个带有 2 个功能的 main.c:
我想保存结构的类型(myTypeStruct)并将其加载到另一个涉及 test.c 的编译单元中:
使用 gcc 插件,我想加载类型并构建该类型的变量以将 test.c 转换为:
我知道树是指向tree_node的指针,而 tree_node 是结构的联合。问题是一棵树与它有关系,并且有一系列难以理解的结构。在构建特定类型的变量时,我需要知道哪些数据需要树。
PD:关于 LTO 如何做这样的事情的文档不足。PD2:对不起我的英语
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++ 编译器的一般问题。
cmake - 如何使用 CMake 启用链接时间优化 (LTO)?
我有最新的 cmake 构建并尝试所有构建配置(Debug、MinSizeRel、RelWithDebugInfo、Release、General)我在生成的 makefile 中看不到任何地方(文本搜索)字符串-lto
,所以或者该功能仍然不存在,或者它需要手动转换(在这种情况下,文本搜索 LTO 或链接时间优化)在文档上没有给出任何结果,所以我在官方文档中看不到启用 LTO 的方法。
有没有办法在不指定手动标志的情况下“全局”启用 LTO(对于所有编译器),而这些标志在最坏的情况下只能由 GCC 支持?
cmake - CMake、静态库和链接时间优化
我正在尝试使用 cmake 和 g++ 创建具有链接时间优化的静态库。
但是当运行典型
我收到以下错误:
link.txt 文件包含以下命令:
据我了解,ar --help
应该-flto -fwhole-program
在libmylib.a
第一行之前运行。但我不知道如何强制 CMake 把它放在那里。
我的假设正确吗?我该如何解决这个问题?
编辑:我想补充一点,我对使用 LTO 完全陌生,所以如果将它用于静态库没有意义,请告诉我。
gcc - 使用 flto 的要求
如果我想编译我的项目,-flto
构建 gcc 是否足够,--enable-gold
或者我还需要构建 gold 并用它替换 ld?我还需要其他标志吗?即我正在这样做
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,尽管它不应该。我该如何解决?
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脚本写不正确!!!
c++ - 启用链接时间优化时链接失败
我有一个(大)wxWidgets 项目,它在更高的优化级别也能顺利编译。
现在,我在此项目的设置中启用了用于构建对象的全程序优化 (/GL) 和链接时间代码生成 (/LTCG)。这会导致无法解析的外部引用 - 无法再找到我再次链接的外部 wxWidgets 库的功能。
那么这是 Visual Studio 的 LTO 中的一个已知错误吗?任何想法如何解决它或可能导致这种情况?
谢谢!
plugins - LLVM LTO Pass 插件的可能性?
我想知道目前是否可以在 LTO 时间安排一个“外部”(.so/.dylib)LLVM 插件(模块)通过?想要这个的原因是我想添加一个模块间优化。
我也找到了这个话题;如何在 LLVM 中编写自定义模块间传递? 但是一个单独的工具对我来说不是一个选择。
谢谢