Я использую Android Studio (3.4.1) для создания apk, который содержит часть C ++. Фаза компиляции работает, а фаза соединения выдает ошибку.
Ошибка:
clang ++: ошибка : такого файла или каталога нет:
«/Users/homefolder/Library/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/libgnustl_static.a'
Это происходит из последней строки команды full link:
/ Пользователи / homefolder / Library / Android / SDK / NDK-расслоение / компилированные инструменты / LLVM / прекомпилированные / Darwin-x86_64 / bin / лязг ++
--target = i686-none-linux-android23 --gcc-toolchain = / пользователи / домашняя папка / библиотека / Android / sdk / ndk-bundle / цепочки инструментов / llvm / prebuilt / darwin-x86_64
--sysroot = / Users / homefolder / Library / Android / SDK / NDK-расслоение / компилированные инструменты / LLVM / прекомпилированные / Darwin-x86_64 / SYSROOT
-fPIC -g -DANDROID -fdata-секции -функция-секции -funwind-таблицы -fstack-protector-strong -no-канонические-префиксы -mstackrealign -fno-addrsig -Wa, - noexecstack -Wformat -Werror = format-security -O2 -DNDEBUG -Wl, - exclude-libs, libgcc.a -Wl, - exclude-libs, libatomic.a -static-libstdc ++ -Wl, - build-id -Wl, - warn-shared-textrel -Wl, - фатальные-предупреждения -Wl, - нет неопределенных -Qunused-arguments -Wl, -z, noexecstack -shared -Wl, -soname, libmy_lib.so -o ../../../. ./build/intermediates/cmake/release/obj/x86/libmy_lib.so
CMakeFiles / my_lib.dir / SRC / главная / CPP / my_lib.cpp.o
-llog ../../../../libs/x86/libssl.a ../../../../libs/x86/libcrypto.a -latomic -lm "/ Пользователи /homefolder/Library/Android/sdk/ndk-bundle/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/libgnustl_static.a"
Действительно, эта библиотека не существует в моей папке SDK. Папка gnu-lib-stdc++
не существует.
Насколько я понимаю, нативный код скомпилирован с CMake. CMake генерирует файлы build.ninja и выполняет компиляцию ниндзя. Если я вручную изменю эти сгенерированные файлы build.ninja , чтобы удалить эту библиотеку , а затем вызову ninja
в терминале (в правильной папке), то он прекрасно компилируется и связывается.
Проблема:
Где мне изменить настройки Android Studio, чтобы эти файлы build.ninja больше не содержали эту библиотеку? Я не хочу изменять сгенерированные файлы каждый раз, когда я создаю apk.
Что я пробовал до сих пор:
Единственный найденный мной файл параметров, связанный с CMake, это CMakeList.txt
. А из документации ( 1 ) кажется, что эту библиотеку можно настроить с помощью CMAKE_ANDROID_STL_TYPE
. Я поставил это значение на 'none'
или 'system'
в CMakeList.txt
, но я не вижу разницы в файлах build.ninja.
# CMakeList.txt
set(CMAKE_ANDROID_STL_TYPE none)
Конфигурация:
- Android Studio 3.4.1
- Инструменты Android SDK 26.1.1
- CMake 3.10.2 (не уверен,
3.6 также установлена)
- macOS 10.14