标签: lto

GCC配置文件引导优化(PGO)收集哪些信息以及哪些优化使用它?

我启用时GCC会收集哪些信息-fprofile-generate,哪些优化确实使用了收集的信息(设置-fprofile-use标志时)?

我需要引用这里.我已经搜索了一段时间,但没有找到任何记录.

有关链接时间优化(LTO)的信息将是一个加号!= d

c++ gcc lto pgo

39
推荐指数
2
解决办法
2万
查看次数

使用GCC的链接时优化与静态链接库

我正在尝试使用-fltoGCC(6.1.1)标志的链接时优化.

虽然它正常工作与我的代码,它不使用静态链接库,我也建,并与我的项目链接(该链接引擎和库是GLSL的优化,仅供参考).

这是输出:

...
/usr/bin/ranlib: ir_expression_flattening.cpp.o: plugin needed to handle lto object
/usr/bin/ranlib: opt_function_inlining.cpp.o: plugin needed to handle lto object
/usr/bin/ranlib: opt_copy_propagation_elements.cpp.o: plugin needed to handle lto object
...
Run Code Online (Sandbox Code Playgroud)

在那之后,当然,我得到一些函数的几个"未定义的引用".

我做了一些研究,发现它可能是因为ar我应该尝试使用gcc-ar,但我不确定我该怎么做.

另外,我正在使用不支持lto的CMake(除了某些平台上的intel编译器,所以我读了......).尽管如此,我尝试使用:

set_property(TARGET glsl_optimizer PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
Run Code Online (Sandbox Code Playgroud)

哪个没用.

此外,我尝试了GCC的-fuse-linker-plugin旗帜,但没有奏效.

我想我将不得不手动使用旧的方式直接使用gcc-ar,或者可能还有其他一些方法?

gcc cmake lto

24
推荐指数
1
解决办法
8923
查看次数

CM支持GCC的链接时间优化(LTO)

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

是否有任何方法可以"全局"(对于所有编译器)启用LTO,而无需指定仅由GCC支持的手动标志?

cmake lto

22
推荐指数
2
解决办法
1万
查看次数

如何将lto与静态库一起使用?

当我尝试使用构建静态库时-flto,我得到未定义的引用错误:

library.cpp:

#include <iostream>

void foo() {
  std::cout << "Test!" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

main.cpp:

void foo();

int main() {
  foo();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译输出:

$ g++ -flto -c library.cpp
$ ar rcs library.a library.o
$ g++ -flto main.cpp library.a
/tmp/ccZIgxCY.ltrans0.ltrans.o: In function `main':
ccZIgxCY.ltrans0.o:(.text+0x5): undefined reference to `foo()'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

如果我链接library.o而不是,它工作正常library.a.我错过了什么?这与GCC 4.9.1和binutils 2.24有关.

c++ gcc lto

18
推荐指数
2
解决办法
6424
查看次数

Clang链接时优化在Fedora 18上无法正常工作

我是铿锵的新手,所以我可能会做些傻事.但我花了几个小时寻找解决方案,包括在这里搜索,我没有找到问题解决-flto与发行版提供的软件包.这个描述的细节是特定于Fedora 18的,但我在Ubuntu 13.04上遇到了类似的问题,所以这个问题并不是特定于Fedora.这是我或铿锵.

问题:我正在尝试编译一个简单的hello-world程序,clang++ -flto以获得链接时优化的好处.没有-flto它工作正常.使用-flto无法链接.调用clang -flto -o hello hello.o -v以查看完整的链接器命令行,我得到:

$ clang++ -flto -o hello hello.o -v
clang version 3.2 (tags/RELEASE_32/final)
Target: x86_64-redhat-linux-gnu
Thread model: posix
 "/usr/bin/ld" --eh-frame-hdr -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o hello /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/4.7.2/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/4.7.2 -L/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../.. -L/lib -L/usr/lib -plugin /usr/bin/../lib/LLVMgold.so hello.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/4.7.2/crtend.o /usr/lib/gcc/x86_64-redhat-linux/4.7.2/../../../../lib64/crtn.o
/usr/bin/ld: /usr/bin/../lib/LLVMgold.so: error loading plugin
/usr/bin/ld: /usr/bin/../lib/LLVMgold.so: error in plugin cleanup (ignored)
clang: error: linker command failed with exit code …
Run Code Online (Sandbox Code Playgroud)

linker fedora clang clang++ lto

16
推荐指数
1
解决办法
3743
查看次数

为什么使用LTO会增加Rust二进制文件的大小?

介绍

我完成了一个带有以下依赖项的小型Rust项目(大约300行代码):

问题

cargo build --release没有进一步配置的情况下使用时,会生成2.942.744字节(= 2,8 MiB)的二进制数.我尝试通过启用链接时间优化(LTO)来优化这一点Cargo.toml:

[profile.release]
lto = true
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,二进制文件增长了,新的大小为3.848.288字节(= 3,7 MiB).

怎么解释这个?我配置Cargo有什么错吗?

compiler-optimization rust lto

16
推荐指数
2
解决办法
1896
查看次数

什么是GCC lto包装?

我正在使用buildroot为嵌入式系统准备图像.我想导出buildroots内部交叉编译器,以便其他人可以使用相同的版本,命令检查GCC版本后:arm-linux-gcc -v我看到配置COLLECT_LTO_WRAPPER为我的硬盘上的静态位置

 COLLECT_LTO_WRAPPER=/home/user/arm/buildroot/output/host/usr/libexec/gcc/arm-unknown-linux-uclibcgnueabi/4.7.1/lto-wrapper
Run Code Online (Sandbox Code Playgroud)

它在另一个系统上是不正确的.

我只能发现LTO意味着链路时间优化.你能解释一下lto包装用什么时候需要什么?

gcc compilation cross-compiling wrapper lto

14
推荐指数
1
解决办法
7607
查看次数

LTO与LLVM和CMake

我正在尝试在CMake项目上应用链接时间优化和LLVM,这将创建一个共享库.我的问题几乎和这个问题一样:

使用CMake在GCC和Clang/LLVM之间切换.

但是,答案似乎不再适用,因为llvm-ld新版本中不存在.在命令行上,我运行以下命令来获取LTO(假设只有2个.cpp文件):

编译为字节代码:

clang++ -c FirstClass.cpp -O3 -flto -o FirstClass.bc
clang++ -c SecondClass.cpp -O3 -flto -o SecondClass.bc
Run Code Online (Sandbox Code Playgroud)

链接字节码:

llvm-link FirstClass.bc SecondClass.bc -o unoptimized.bc
Run Code Online (Sandbox Code Playgroud)

优化字节码:

opt -O3 unoptimized.bc -o optimized.bc
Run Code Online (Sandbox Code Playgroud)

将字节代码转换为共享对象:

clang++ -shared optimized.bc -o libTest.so
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何让CMake运行其他步骤吗?

c++ cmake llvm clang lto

14
推荐指数
1
解决办法
7390
查看次数

gcc LTO似乎剥离了调试符号

我有一个项目,在ARM Cortex-M4处理器上运行,我正在尝试包含gcc链接时优化(LTO)功能.

目前我的编译和链接标志是:

CFLAGS = -ggdb -ffunction-sections -Og
LDFLAGS = -Wl,-gc-sections
Run Code Online (Sandbox Code Playgroud)

使用这些标志一切正常,我能够正确调试项目.

然后我尝试添加-flto到CFLAGS.虽然程序工作正常,但我无法再调试项目,gdb抱怨缺少调试符号.objdump -g在ELF文件上运行(启用LTO)会提供以下输出:

xxx.elf:     file format elf32-littlearm

Contents of the .debug_frame section:

00000000 0000000c ffffffff CIE
  Version:               1
  Augmentation:          ""
  Code alignment factor: 2
  Data alignment factor: -4
  Return address column: 14

  DW_CFA_def_cfa: r13 ofs 0

00000010 00000018 00000000 FDE cie=00000000 pc=08002a3c..08002a88
  DW_CFA_advance_loc: 2 to 08002a3e
  DW_CFA_def_cfa_offset: 16
  DW_CFA_offset: r4 at cfa-16
  DW_CFA_offset: r5 at cfa-12
  DW_CFA_offset: r6 at cfa-8
  DW_CFA_offset: r14 at cfa-4
  DW_CFA_nop …
Run Code Online (Sandbox Code Playgroud)

debugging optimization gcc lto

12
推荐指数
2
解决办法
1771
查看次数

Mingw x64 Windows:需要处理lto对象的插件

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

BFD: my/project/dir/filename.cpp.obj: plugin needed to handle lto object
Run Code Online (Sandbox Code Playgroud)

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

我的旗帜是:

CXX_FLAGS "-fno-exceptions -fno-rtti -std=c++14 -O3 -fstrict-aliasing -flto -fomit-frame-pointer -march=native -ffast-math -funroll-loops"
LINKER_FLAGS "-O1 -s"
Run Code Online (Sandbox Code Playgroud)

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

c++ windows mingw linker-errors lto

11
推荐指数
1
解决办法
2412
查看次数