我试图使用链接时优化与-flto
标志海湾合作委员会(6.1.1)链接时优化。使用GCC与静态链接库
虽然它与我的代码一起工作正常,但它并未链接到静态链接库我也在构建和链接我的项目(这是Engine和库是glsl-optimizer,仅供参考)。
这里是输出:
...
/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
...
而在此之后,当然,我得到几个“未定义的引用”到一些功能。
我做了一些研究,发现它可能是因为ar
,我应该尝试使用gcc-ar
,但我不知道我该怎么做。
而且,我使用CMake的不支持LTO(除英特尔在某些平台上的编译器,所以我读了...)。尽管如此,我试过使用:
set_property(TARGET glsl_optimizer PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
哪一个没有工作。
而且,我试图GCC的-fuse-linker-plugin
标志,没有工作。
我想我得做手工直接使用gcc-ar
的老路上,也许还有一些其他的方法?
你有没有试着用''中或CMakeCache.txt'通过的CMake的GUI(GCC-ar'在'CMAKE_AR'缓存变量替换'ar'在高级选项下)? 'INTERPROCEDURAL_OPTIMIZATION'不适用于GCC,因此在CMake的GitLab页面是[open issue](https://gitlab.kitware.com/cmake/cmake/issues/15939)。 – Florian
@Florian:我只是试过,只设置'CMAKE_AR'并不能解决问题。您还需要'CMAKE_CXX_ARCHIVE_CREATE'和'CMAKE_CXX_ARCHIVE_FINISH'(参见@Mike Kinghan的回答) – CpCd0y