Компиляция приложения SDL + BGFX для Android с помощью CMake и VCPKGC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Компиляция приложения SDL + BGFX для Android с помощью CMake и VCPKG

Сообщение Anonymous »

Я создал небольшое приложение на SDL, BGFX, CMake и VCPKG, которое представляет собой вращающийся текстурированный куб. Я заставил приложение работать на своем компьютере с Windows и теперь пытаюсь заставить его работать на своем телефоне Android.
Я следовал (надеюсь, правильно) этому руководству здесь https://github. com/libsdl-org/SDL/blob/main/docs/README-android.md, и я работал над всеми проблемами Gradle. В настоящее время я застрял на VCPKG, компилируя BGFX (и, вероятно, все) для x64-android, когда целью является Arm64-v8a.
Проблемы начались, потому что CMAKE_TOOLCHAIN_FILE используется для поиска/установки vcpkg .cmake, но при использовании ndk ему присваивается местоположение файла ndk. Поэтому я добавил include("C:/Users/charl/.vcpkg-clion/vcpkg/scripts/buildsystems/vcpkg.cmake") в файл CMakeLists.txt, чтобы использовать vcpkg.
Полная ошибка после запуска .\gradlew.bat installDebug такова:

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

.\gradlew.bat installDebug

> Task :app:buildCMakeDebug[arm64-v8a] FAILED
C/C++: ninja: Entering directory `C:\Users\charl\CLionProjects\Crossplatform\android-project\app\.cxx\Debug\3j4z1g21\arm64-v8a'
C/C++: cmd.exe /C "cd .  && C:\Users\charl\AppData\Local\Android\Sdk\ndk\27.0.12077973\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=aarch64-none-linux-android21 --sysroot=C:/Users/charl/AppData/Local/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security   -fno-limit-debug-info  -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--no-undefined-version -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libCrossplatform.so -o ..\..\..\..\build\intermediates\cxx\Debug\3j4z1g21\obj\arm64-v8a\libCrossplatform.so CMakeFiles/Crossplatform.dir/main.cpp.o  vcpkg_installed/x64-android/debug/lib/libbx.a  vcpkg_installed/x64-android/debug/lib/libbgfx.a  vcpkg_installed/x64-android/debug/lib/libbimg.a  vcpkg_installed/x64-android/debug/lib/libbimg_decode.a  vcpkg_installed/x64-android/debug/lib/libSDL3.a  vcpkg_installed/x64-android/debug/lib/libglm.a  vcpkg_installed/x64-android/debug/lib/libbx.a  C:/Users/charl/AppData/Local/Android/Sdk/ndk/28.0.12916984/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/x86_64-linux-android/21/liblog.so  vcpkg_installed/x64-android/debug/lib/libtinyexr.a  vcpkg_installed/x64-android/debug/lib/libminiz.a  -lm  -lOpenSLES  -ldl  -llog  -landroid  -lGLESv1_CM  -lGLESv2  -latomic -lm && cd ."
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbx.a(amalgamated.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbgfx.a(amalgamated.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_averages_and_directions.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_block_sizes.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_color_quantize.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_color_unquantize.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_compress_symbolic.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_compute_variance.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_decompress_symbolic.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_diagnostic_trace.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_entry.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_find_best_partitioning.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_ideal_endpoints_and_weights.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_image.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_integer_sequence.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_mathlib.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_mathlib_softfloat.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_partition_tables.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_percentile_tables.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_pick_best_endpoint_format.cpp.o) is incompatible with aarch64linux
C/C++: ld.lld: error: too many errors emitted, stopping now (use --error-limit=0 to see all errors)
C/C++: clang++: error: linker command failed with exit code 1 (use -v to see invocation)
C/C++: ninja: build stopped: subcommand failed.

[Incubating] Problems report is available at: file:///C:/Users/charl/CLionProjects/Crossplatform/android-project/build/reports/problems/problems-report.html

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:buildCMakeDebug[arm64-v8a]'.
>  com.android.ide.common.process.ProcessException: ninja: Entering directory `C:\Users\charl\CLionProjects\Crossplatform\android-project\app\.cxx\Debug\3j4z1g21\arm64-v8a'
[1/1] Linking CXX shared library ..\..\..\..\build\intermediates\cxx\Debug\3j4z1g21\obj\arm64-v8a\libCrossplatform.so
FAILED: ../../../../build/intermediates/cxx/Debug/3j4z1g21/obj/arm64-v8a/libCrossplatform.so
cmd.exe /C "cd .  && C:\Users\charl\AppData\Local\Android\Sdk\ndk\27.0.12077973\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=aarch64-none-linux-android21 --sysroot=C:/Users/charl/AppData/Local/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_F
ORTIFY_SOURCE=2 -Wformat -Werror=format-security   -fno-limit-debug-info  -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--no-undefined-version -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libCrossplatform.so -o ..\..\..\..\build\intermediates\cxx\Debug\3j4z1g21\obj\arm64-v8a\libCrossplatform.so CMakeFiles/Crossplatform.dir/main.cpp.o  vcpkg_installed/x64-android/d
ebug/lib/libbx.a  vcpkg_installed/x64-android/debug/lib/libbgfx.a  vcpkg_installed/x64-android/debug/lib/libbimg.a  vcpkg_installed/x64-android/debug/lib/libbimg_decode.a  vcpkg_installed/x64-android/debug/lib/libSDL3.a  vcpkg_installed/x64-android/debug/lib/libglm.a  vcpkg_installed/x64-android/debug/lib/libbx.a  C:/Users/charl/AppData/Local/Android/Sdk/ndk/28.0.12916984/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/x86_64-linux-android/21/liblog.so  vcpkg_installed/x64-android/debug/lib/libtinyexr.a  vcpkg_installed/x64-android/debug/lib/libminiz.a  -lm  -lOpenSLES  -ldl  -llog  -landroid  -lGLESv1_CM  -lGLESv2  -latomic -lm && cd ."
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbx.a(amalgamated.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbgfx.a(amalgamated.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_averages_and_directions.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_block_sizes.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_color_quantize.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_color_unquantize.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_compress_symbolic.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_compute_variance.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_decompress_symbolic.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_diagnostic_trace.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_entry.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_find_best_partitioning.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_ideal_endpoints_and_weights.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_image.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_integer_sequence.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_mathlib.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_mathlib_softfloat.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_partition_tables.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_percentile_tables.cpp.o) is incompatible with aarch64linux
ld.lld: error: vcpkg_installed/x64-android/debug/lib/libbimg.a(astcenc_pick_best_endpoint_format.cpp.o) is incompatible with aarch64linux
ld.lld: error: too many errors emitted, stopping now (use --error-limit=0 to see all errors)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

C++ build system [build] failed while executing:
@echo off
"C:\\Users\\charl\\AppData\\Local\\Android\\Sdk\\cmake\\3.22.1\\bin\\ninja.exe" ^
-C ^
"C:\\Users\\charl\\CLionProjects\\Crossplatform\\android-project\\app\\.cxx\\Debug\\3j4z1g21\\arm64-v8a" ^
Crossplatform
from C:\Users\charl\CLionProjects\Crossplatform\android-project\app

* Try:
> Run with --stacktrace option to get the stack trace.
>  Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.12/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD FAILED in 1s
18 actionable tasks: 2 executed, 16 up-to-date
И моя интерпретация такова: мои файлы компилируются для Arm64, но vcpkg думает, что я использую x64-android. Я попытался исправить это, установив этот набор (VCPKG_TARGET_TRIPLET "arm64-android" CACHE STRING "Vcpkg Triple") в CMakeLists.txt перед командой include, но это ничего не дало.
Гитхаб находится здесь: https://github.com/TasmanianNoob/Crossplatform, я использую Clion.
В android-project/gradle.properties я установил org.gradle.java.home=C:/Program Files/Java/jdk-21 и в android-project/local.properties я set sdk.dir=C:/Users/charl/AppData/Local/Android/Sdk.
Мне нужно было отредактировать vcpkg/scripts/toolchains/android.cmake, поскольку переменные среды не передавались, поэтому в скрипте не было установлено ANDROID_NDK_HOME. Я просто жестко запрограммировал местоположение. Об этом я задам отдельный вопрос.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -and-vcpkg
Ответить

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

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

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

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

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