Ich versuche, Link-Zeit-Optimierungen mit dem Flag von GCC (6.1.1) zu verwenden.Verwenden von GCC-Link-Zeit-Optimierung mit statischen verknüpften Bibliotheken
Während es funktioniert gut mit meinem Code, es verbindet sich nicht mit einer statischen verknüpften Bibliothek Ich baue und verlinke auch mit meinem Projekt (Engine und die Bibliothek ist glsl-optimizer, nur als Referenz). Hier
ist die Ausgabe:
...
/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
...
Und danach, natürlich habe ich mehrere „undefinierte Referenzen“ auf einige Funktionen erhalten.
Ich habe etwas Forschung und herausgefunden, dass es wegen ar
sein könnte, und ich sollte versuchen, gcc-ar
zu verwenden, aber ich bin nicht sicher, wie ich das tun könnte.
Auch ich benutze CMake, die nicht unterstützt lto (mit Ausnahme von Intel Compiler auf einigen Plattformen, also lese ich ...). Obwohl ich versucht habe mit:
set_property(TARGET glsl_optimizer PROPERTY INTERPROCEDURAL_OPTIMIZATION True)
Welche nicht funktioniert hat.
Auch versuchte ich GCC -fuse-linker-plugin
Flag, die nicht funktionierte.
Ich denke, ich muss es manuell auf die alte Art und Weise direkt mit gcc-ar
tun, oder vielleicht gibt es eine andere Methode? Hier
Haben Sie versucht, GUI zu ersetzen 'ar' mit gcc-ar' in' CMAKE_AR' gecached Variable in 'CMakeCache.txt' oder über CMake ist (unter erweiterten Optionen)? Diese 'INTERPROCEDURAL_OPTIMIZATION' funktioniert nicht für GCC ist ein [offenes Problem] (https://gitlab.kitware.com/cmake/cmake/issues/15939) auf der CMake GitLab Seite. – Florian
@Florian: Ich habe gerade versucht und nur die Einstellung 'CMAKE_AR' löst das Problem nicht. Sie brauchen auch 'CMAKE_CXX_ARCHIVE_CREATE' und' CMAKE_CXX_ARCHIVE_FINISH' (siehe @Mike Kinghans Antwort) – CpCd0y