Termux — проблема с связыванием `libc++_shared.so` с Premake5Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Termux — проблема с связыванием `libc++_shared.so` с Premake5

Сообщение Anonymous »

Я пытаюсь создать проект с помощью Premake5 в среде Android и сталкиваюсь с ошибкой компоновщика, связанной с libc++_shared.so. Ниже приведены подробные сведения о проблеме и о том, что я пробовал на данный момент.

Конфигурация Premake5

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

Код: Выделить всё

local ocgcore_config=function()
files { "*.h", "*.hpp", "*.cpp", "RNG/*.hpp", "RNG/*.cpp" }
warnings "Extra"
cppdialect "C++17"
rtti "Off"

filter "configurations:Release"
optimize "Speed"
filter "configurations:Debug"
optimize "Off"
filter "action:not vs*"
buildoptions { "-Wno-unused-parameter", "-pedantic" }
filter "system:linux"
linkoptions { "-Wl,--no-undefined" }
filter { "system:macosx", "files:processor_visit.cpp" }
buildoptions { "-fno-exceptions" }
filter {}
include "./lua/"
links { "lua" }
includedirs { "lua/src" }
end

if not subproject then
newoption {
trigger = "oldwindows",
description = "Use the v141_xp toolset to support windows XP sp3"
}
workspace "ocgcore"
location "build"
language "C++"
objdir "obj"
configurations { "Debug", "Release" }
symbols "On"
staticruntime "on"
startproject "ocgcoreshared"

filter "system:windows"
defines { "WIN32", "_WIN32", "NOMINMAX" }
platforms {"Win32", "x64", "arm", "arm64"}

filter "platforms:Win32"
architecture "x86"

filter "platforms:x64"
architecture "x64"

filter "platforms:arm64"
architecture "ARM64"

filter "platforms:arm"
architecture "ARM"

filter { "action:vs*", "platforms:Win32 or x64" }
vectorextensions "SSE2"
if _OPTIONS["oldwindows"] then
toolset "v141_xp"
end

filter "action:vs*"
flags "MultiProcessorCompile"

filter "configurations:Debug"
defines "_DEBUG"
targetdir "bin/debug"
runtime "Debug"

filter "configurations:Release"
defines "NDEBUG"
targetdir "bin/release"

local function set_target_dir(target,arch)
filter { "system:windows", "configurations:" .. target, "architecture:" .. arch }
targetdir("bin/" .. arch .. "/" ..  target)
end

set_target_dir("debug","x64")
set_target_dir("debug","arm")
set_target_dir("debug","arm64")

set_target_dir("release","x64")
set_target_dir("release","arm")
set_target_dir("release","arm64")

filter { "action:not vs*", "system:windows" }
buildoptions { "-static-libgcc", "-static-libstdc++", "-static" }
linkoptions { "-static-libgcc", "-static-libstdc++", "-static" }
defines { "UNICODE", "_UNICODE" }

filter { "system:linux" }
includedirs { "lua/src" }
linkoptions { "-static-libgcc", "-static-libstdc++" }

filter { "system:android" }
libdirs { "$(NDK_HOME)/toolchains/llvm/prebuilt/linux-aarch64/sysroot/usr/lib/aarch64-linux-android" }
links { "c++_shared" }
linkoptions { "-L$(NDK_HOME)/toolchains/llvm/prebuilt/linux-aarch64/sysroot/usr/lib/aarch64-linux-android -lc++_shared" }

local function disableWinXPWarnings(prj)
premake.w('false')
end

local function vcpkgStaticTriplet202006(prj)
premake.w('false')
premake.w('false')
premake.w('false')
end

require('vstudio')

premake.override(premake.vstudio.vc2010.elements, "globals", function(base, prj)
local calls = base(prj)
table.insertafter(calls, premake.vstudio.vc2010.targetPlatformVersionGlobal, disableWinXPWarnings)
table.insertafter(calls, premake.vstudio.vc2010.globals, vcpkgStaticTriplet202006)
return calls
end)
end

project "ocgcore"
kind "StaticLib"
ocgcore_config()

project "ocgcoreshared"
kind "SharedLib"
flags "NoImportLib"
--  filter "configurations:Release"
--      flags "LinkTimeOptimization"
--  filter {}
targetname "ocgcore"
defines "OCGCORE_EXPORT_FUNCTIONS"
staticruntime "on"
visibility "Hidden"
ocgcore_config()

Переменные среды

Я установил переменную среды NDK_HOME в своем файле .bashrc:

Код: Выделить всё

export NDK_HOME=$HOME/android-ndk-r26b
Я проверил путь, перечислив содержимое:

Код: Выделить всё

ls $NDK_HOME/toolchains/llvm/prebuilt/linux-aarch64/sysroot/usr/lib/aarch64-linux-android | grep libc++_shared.so

Ошибка

Несмотря на эти конфигурации, я все еще сталкиваюсь со следующей ошибкой:

Код: Выделить всё

ld.lld: error: unable to find library -lc++_shared
aarch64-linux-android-clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [ocgcoreshared.make:111: ../bin/release/libocgcore.so] Error 1
make: *** [Makefile:46: ocgcoreshared] Error 2
Что я упускаю или делаю неправильно в этой настройке? Как устранить ошибку компоновщика, связанную с libc++_shared.so?
Спасибо за любую помощь!

Подробнее здесь: https://stackoverflow.com/questions/788 ... h-premake5
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Libcrashpad_handler.so: библиотека "libc ++ _ shared.so" не найдено: необходимо для основного исполняемого файла
    Anonymous » » в форуме Android
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Termux сообщает «Нет такого файла или каталога» для bash даже после использования termux-fix-shebang
    Anonymous » » в форуме Android
    0 Ответы
    164 Просмотры
    Последнее сообщение Anonymous
  • Ошибка неопределенной ссылки SDL2, использование premake5 для сборки, Arch Linux
    Anonymous » » в форуме C++
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Как использовать premake5 вместе с MinGW?
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Связывание статической библиотеки с Premake5 не выполняется.
    Anonymous » » в форуме C++
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»