Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Использование потока и мьютекса в Android Studio с ndk 10c

Автор вопроса: GR EnvoyОтветов: 1

У меня есть последняя версия 64-битного NDK (r10c) и последняя версия Android Studio, которую я могу загрузить (0.8.14).

Я делаю несколько вызовов JNI для использования String, Vector, Atomic и т. д. Но я не могу понять, как использовать поток и мьютекс.

Оба они дают мне ту же ошибку

Error:(92, 5) error: 'thread' is not a member of 'std'
Error:(93, 5) error: 'mutex' is not a member of 'std'

Я уверен, что NDK использует 4.9 gnu-libstdc++. Если я добавлю #error в файл, я увижу свою ошибку, и компиляция остановится. Похоже, я не пропускаю ни одного определения, так как могу поместить #error внутри класса и увидеть его.

Вот конфигурация ndk в моем build.gradle

ndk {
    moduleName "myLib"
    ldLibs "log"
    stl "gnustl_shared"
    cFlags "-std=c++11 -frtti -fexceptions -pthread"
}

Кажется, что -frtti и -pthread не имеют значения. Я также пробовал stl gnustl_shared, а также gnustl_static, без разницы.

android-studioandroidandroid-ndkgnu

Ответы

Ответ 1 · рейтинг 3 · Alex Cohn

По умолчанию NDK по-прежнему использует GCC 4.6, который не поддерживает C++11. Вам потребуется эквивалент оценки для установки NDK_TOOLCHAIN_VERSION:=4.9 в Application.mk. Вы можете найти некоторые ответы здесь: как указать NDK_TOOLCHAIN_VERSION в файле gradle для Android ndk build, но, к сожалению, суть в том, что сегодня вам нужно отключить автоматический вызов ndk-build, установив jni.srcDirs, чтобы очистить и использовать файлы Android.mk и Application.mk по-старому.

Итак, если в вашем каталоге jni есть файлы file1.cpp и file2.cpp, вам понадобится следующий Android. тк

LOCAL_PATH            := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE          := myLib
LOCAL_SRC_FILES       := file1.cpp file2.cpp
LOCAL_LDLIBS          := -llog
LOCAL_CFLAGS          := -std=c++11 -frtti -fexceptions -pthread

... и Application.mk

APP_ABI               := armeabi-v7a
APP_STL               := gnustl_shared
NDK_TOOLCHAIN_VERSION := 4.9

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы