Как скомпилировать библиотеку Linux LTO с поддержкой Premake 5?

ТАКАЯ мудрость, я обращаюсь к тебе. Я пытаюсь создать 64-битную статическую библиотеку, используя LTO с Makefiles и Premake 5 на Ubuntu 16.04 LTS.

Вот сценарий premake, который я использую:

-- premake5.lua
workspace "TestApp"
location "TestApp" -- The directory of generated files - .sln, etc.
configurations { "Debug", "Shipping" }
platforms { "Linux_Static", "Linux_DLL" }
targetdir "TestApp/Build/%{cfg.platform}/%{cfg.buildcfg}"objdir "TestApp/Build/"language "C++"
architecture "x86_64"system "linux"
filter "platforms:*Static"kind "StaticLib"
filter "platforms:*DLL"kind "SharedLib"
filter "kind:SharedLib"defines { "TEST_USE_DLL", "TEST_DLL_EXPORT" }

-- Configuration filters
configuration "*"flags { "ExtraWarnings", "C++14", "MultiProcessorCompile", "ShadowedVariables", "UndefinedIdentifiers" }

configuration { "Debug" }
symbols "On"defines { "TEST_DEBUG" }
optimize "Debug"
configuration "Shipping"defines { "TEST_SHIPPING" }
optimize "Full"flags { "LinkTimeOptimization" }
-- step 1
--buildoptions "--plugin=$$(gcc --print-file-name=liblto_plugin.so)"
-- step 2
--toolset "clang"
-- step 3
--premake.tools.gcc.ar = "gcc-ar"
-- Projects
project "TestCore"location "TestApp/Core"files { "TestApp/Core/*.h", "TestApp/Core/*.cpp" }
includedirs { "TestApp/" }project "UnitTests"location "TestApp/Tests"kind "ConsoleApp"links { "TestCore" }
objdir "TestApp/Tests/Build/"
files { "TestApp/Tests/UnitTests/*.cpp", "TestApp/ThirdParty/Catch/*" }
includedirs { "TestApp/ThirdParty/Catch", "TestApp/" }

removedefines { "TEST_DLL_EXPORT" }

filter { "platforms:*DLL", "system:linux" }
runpathdirs { "Build/%{cfg.platform}/%{cfg.buildcfg}" }

«Доставка» является неисправной конфигурацией. Я также в комплекте весь тестовый проект в zip для вас, чтобы попытаться воспроизвести проблему.

Ошибки, которые у меня возникают при компиляции библиотеки TestCore, являются первыми plugin needed to handle lto object, затем plugin /usr/lib/gcc/x86_64-linux-gnu/5/liblto_plugin.so is not licensed under a GPL-compatible license,

Что мы можем с этим поделать ? Если у вас есть какие-либо знания, чтобы заставить его работать с GCC, пожалуйста, помогите.

что бы вы сделали, чтобы воспроизвести ошибки GCC после распаковки zip:

  1. cd testBreaking
  2. premake5 gmake
  3. cd TestApp
  4. make config = shipping_linux_static TestCore (получить ошибку «плагин, необходимый для обработки объекта lto»)
  5. Раскомментируйте строку 37 из premake5.lua, чтобы получить сообщение об ошибке «не лицензировано под лицензией, совместимой с GPL»
  6. Раскомментируйте строку 43, чтобы использовать gcc-ar вместо ar, обратите внимание, что она тоже не работает
  7. Использование опции gcc -fuse-linker-plugin не помогает

Еще немного информации о системе:

  • Ubuntu 16.04 LTS
  • gcc 5.4, make 4.1, ar 2.26.1
  • premake 5.0.0-alpha11

Я получил это, работая с Clang. С помощью toolset clang для конфигурации доставки (с использованием LLVM 3.9) библиотека, кажется, компилируется нормально. Но Я получил еще одну ошибку:

error adding symbols: Archive has no index; run ranlib to add one

Мне удалось обойти эту проблему, позвонив ranlib Build/Linux_Static/Shipping/libTestCore.a --plugin /usr/lib/llvm-3.9/lib/LLVMgold.so, а затем сделать снова.

Так что это больно работает с использованием Clang.

Я прочитал, что я мог создать специальный набор инструментов для предварительного приготовления для такого рода вещей, потому что рекомендуется заменить все утилиты GNU их gcc- коллеги (например, gcc-ar вместо ar), но быстро возиться с premake.tools.gcc.ar = "gcc-ar" без результата, я не уверен, что это поможет.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]