jjzjj

c++ - 使用 MinGW-W64 的 LTO 导致 DLL 链接失败

我未能使用带-flto的MinGW-W64为Windowsx86-64构建共享库。这是我得到的(编译是在Linux机器上完成的):#...x86_64-w64-mingw32-g++-c-std=gnu++11-fvisibility=hidden-DGLEW_STATIC-Ofast-flto-frtti-pedantic-Wall-Wextra-fexceptions-mthreads-DUNICODE-DQT_LARGEFILE_SUPPORT-I.-I'include'-I'/usr/x86_64-w64-mingw32/share/qt4/mkspecs/win32-g++-

c++ - 用于 gcc 或 clang 的 LTO 是否可以跨 C 和 C++ 方法进行优化

如果链接时优化(LTO)与gcc一起使用或clang,是否可以跨C和C++语言边界优化代码?例如,C函数是否可以内联到C++调用程序中? 最佳答案 是的!链接时优化通常适用于“胖”目标文件中存在的中间表示(IR),它可以包含用于传统链接的机器代码和用于LTO链接的IR。在此阶段,不再有高级语言结构,因此链接时优化与语言无关。海合会海湾合作委员会的link-timeoptimization(LTO)在GIMPLE上工作,GIMPLE是GCC的中间表示之一。IR始终与语言无关,因此任何链接时优化都适用于从任何语言生成的代码。来自GCCO

LTO助推磁带大容量存储技术超越磁盘HDD

如前面提到,磁带的格式和技术标准,在之前有很多种类,也导致各种不兼容。为了解决这个问题,上世纪90年代,三个厂商联合研发线性磁带开放技术,LTO,LinearTapeOpen。LTO标准最初有两个格式,一个Ultrium,主要负责支持大容量技术,一个Accelis,主要负责高性能。磁带被采用的原因,目前跟性能也不相关,要性能的话,早就切换固态硬盘SSD了。所以目前一说LTO,基本上大家就等同于LTOUltrium。LTOUltrium有自己的品牌和logo,也在不断推进LTO技术的发展。目前参与LTOUltrium技术标准制定与推进的公司主要有:FacebookFujiFilmCorporat

c++ - LTO 中的优化是否与正常编译中的相同?

在编译翻译单元时,编译器会进行大量优化-内联、常量折叠/传播、别名分析、循环展开、死代码消除以及许多我从未听说过的其他优化。在多个翻译单元之间使用LTO/LTCG/WPO时是否全部完成,或者只是完成了其中的一个子集(或变体)(我听说过内联)?如果没有完成所有优化,我会考虑统一构建优于LTO(或者当有超过1个统一源文件时可能同时使用它们)。我的猜测是它不一样(统一构建具有完整的优化集),而且它在编译器之间变化很大。每个编译器的lto文档并没有准确回答这个问题(或者我无法理解它)。由于lto涉及将中间表示保存在目标文件中,理论上LTO可以进行所有优化......对吗?请注意,我不是在询问构

c++ - LTO 中的优化是否与正常编译中的相同?

在编译翻译单元时,编译器会进行大量优化-内联、常量折叠/传播、别名分析、循环展开、死代码消除以及许多我从未听说过的其他优化。在多个翻译单元之间使用LTO/LTCG/WPO时是否全部完成,或者只是完成了其中的一个子集(或变体)(我听说过内联)?如果没有完成所有优化,我会考虑统一构建优于LTO(或者当有超过1个统一源文件时可能同时使用它们)。我的猜测是它不一样(统一构建具有完整的优化集),而且它在编译器之间变化很大。每个编译器的lto文档并没有准确回答这个问题(或者我无法理解它)。由于lto涉及将中间表示保存在目标文件中,理论上LTO可以进行所有优化......对吗?请注意,我不是在询问构

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

当我尝试使用-flto构建静态库时,出现undefinedreference错误:library.cpp:#includevoidfoo(){std::coutma​​in.cpp:voidfoo();intmain(){foo();return0;}编译输出:$g++-flto-clibrary.cpp$arrcslibrary.alibrary.o$g++-fltomain.cpplibrary.a/tmp/ccZIgxCY.ltrans0.ltrans.o:Infunction`main':ccZIgxCY.ltrans0.o:(.text+0x5):undefinedrefer

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

当我尝试使用-flto构建静态库时,出现undefinedreference错误:library.cpp:#includevoidfoo(){std::coutma​​in.cpp:voidfoo();intmain(){foo();return0;}编译输出:$g++-flto-clibrary.cpp$arrcslibrary.alibrary.o$g++-fltomain.cpplibrary.a/tmp/ccZIgxCY.ltrans0.ltrans.o:Infunction`main':ccZIgxCY.ltrans0.o:(.text+0x5):undefinedrefer

android - 为什么 LTO 在 armv8a NDK 构建中引入新的 DT 标志 TLSDESC_PLT 和 TLSDESC_GOT

我正在使用NDK构建适用于Android的armv8aSDK,我想在启用LTO的情况下进行构建。我将-flto添加到C++工具链的编译和链接标志中,一切顺利,直到我尝试在模拟器中运行,此时发出如下错误:警告:链接器:/data/lib/libservice.so:未使用的DT条目:类型0x6ffffef6arg0x8e30和警告:链接器:/data/lib/libservice.so:未使用的DT条目:类型0x6ffffef7arg0x2fb50一些研究使我找到了thisanswer这使我能够挖掘出0x6ffffef6和0x6ffffef6的符号名称,它们恰好分别是TLSDESC_PL

c++ - undefined reference 在 GCC 下使用 LTO 交叉编译静态库

我正在尝试使用GCC4.9.2为Windows(x86_64-w64-mingw32)交叉编译来自Linux(x86_64-pc-linux-gnu)的应用程序。当构建链接到静态库的目标并使用链接时优化时,对于目标使用的库中的所有符号,我从链接器收到undefinedreference错误。例如,从bar.cpp构建bar.aintbar(void){return42;}并与foo.cpp链接externintbar(void);intmain(int,char**){bar();}使用命令行x86_64-w64-mingw32-g++-flto-ofoo.o-cfoo.cppx86_

c++ - Mingw x64 Windows : plugin needed to handle lto object

当我尝试使用64位mingw(x86_64-5.1.0-posix-seh-rt_v4-rev0)编译我的项目时,我收到消息:BFD:my/project/dir/filename.cpp.obj:pluginneededtohandleltoobject对于每个源文件。然而,当我使用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
12