ТАКАЯ мудрость, я обращаюсь к тебе. Я пытаюсь создать 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:
Еще немного информации о системе:
Я получил это, работая с 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"
без результата, я не уверен, что это поможет.
Задача ещё не решена.
Других решений пока нет …