我試圖使用鏈接時優化與-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