Компиляция libDispatch (GCD) для Android

Я пытаюсь скомпилировать libdispatch для Linux на Android. Однако я не смог найти никаких инструкций для Android в файлах проекта.

Я вижу, что существует несколько StackOverflow вопросы об использовании libdispatch, но информации довольно мало.

Кто-нибудь успешно скомпилировал libdispatch для Android с помощью NDK?


person Sam Khawase    schedule 06.04.2016    source источник
comment
Если у кого-то такая же проблема, вот что сработало для меня: ndk-build NDK_TOOLCHAIN_VERSION=clang NDK_PROJECT_PATH=libdispatch/ APP_BUILD_SCRIPT=libdispatch/Android.mk   -  person Sam Khawase    schedule 07.04.2016
comment
Для тех, кто обнаружит это позже, команда, опубликованная Сэмом, сработала для меня, но только после клонирования github.com/mackyle/blocksruntime github.com/PSPDFKit-labs/libkqueue и github.com/PSPDFKit-labs/libpthread_workqueue в тот же каталог libdispatch в.   -  person milch    schedule 05.07.2016


Ответы (1)


Я лично не пробовал компилировать libdispatch для Android, но я собрал много других библиотек. Похоже, создание libdispatch должно быть довольно простым, поскольку уже существует Android. mk в репозитории. Вы должны иметь возможность собрать эту библиотеку с помощью следующей команды (разделить строки для удобства чтения):

<ndk directory path>/ndk-build \ 
-C <path to libdispatch source directory> \
NDK_LIBS_OUT=<path to directory for built libraries> \
APP_BUILD_SCRIPT=Android.mk 
person Francesca Nannizzi    schedule 06.04.2016
comment
Я пробовал это раньше, и это дало мне ошибку: Android NDK: Could not find application project directory ! Android NDK: Please define the NDK_PROJECT_PATH variable to point to it. - person Sam Khawase; 06.04.2016
comment
Вы передали путь к каталогу вашего проекта в ndk-build, используя аргумент -C? Некоторые люди используют NDK_PROJECT_PATH= вместо -C для передачи пути к проекту, но я никогда не использовал это с более новыми NDK. Какую версию ndk вы используете? - person Francesca Nannizzi; 06.04.2016
comment
Я пытаюсь скомпилировать и собрать проект libdispatch, извлеченный из Github. Вот ошибка, которую я получаю сейчас: ndk-build NDK_PROJECT_PATH=./libdispatch Android NDK: Your APP_BUILD_SCRIPT points to an unknown file: ./libdispatch/jni/Android.mk /Users/sam/Library/Android/sdk/ndk-bundle/build/core/add-application.mk:195: *** Android NDK: Aborting....Stop. Нужно ли включать libdispatch в качестве подмодуля в проект Android? я совсем запуталась :-( - person Sam Khawase; 06.04.2016
comment
Предполагается, что файл Android.mk всегда находится внутри каталога с именем jni, поэтому ndk-build пытается найти путь jni/Android.mk внутри каталога libdispatch. Его нет, отсюда и ошибка. Это ошибка разработчиков libdispatch, ИМО. Попробуйте добавить APP_BUILD_SCRIPT=‹путь к каталогу libdispatch›/Android.mk в команду ndk-build. - person Francesca Nannizzi; 07.04.2016
comment
На самом деле, используйте APP_BUILD_SCRIPT=Android.mk для вашей команды ndk-build. APP_BUILD_SCRIPT относится к каталогу, указанному с помощью -C. - person Francesca Nannizzi; 07.04.2016
comment
Спасибо, я понял это из источника и прошел мимо. Есть некоторые ошибки компиляции из-за времени выполнения блоков. У 3 проектов, упомянутых в README, нет инструкций по компиляции, и мне придется обратиться к сопровождающему в репозитории GitHub. - person Sam Khawase; 07.04.2016
comment
Вот ошибка кстати: ndk-build NDK_PROJECT_PATH=libdispatch/ APP_BUILD_SCRIPT=libdispatch/Android.mk 0 < 15:11:30 [armeabi] Compile thumb : dispatch <= apply.c arm-linux-androideabi-gcc: error: unrecognized command line option '-momit-leaf-frame-pointer' arm-linux-androideabi-gcc: error: unrecognized command line option '-fblocks' make: *** [libdispatch//obj/local/armeabi/objs/dispatch/src/apply.o] Error 1 - person Sam Khawase; 07.04.2016
comment
Я думаю, вы должны принять мой ответ, в таком случае. Кстати, эта ошибка, вероятно, означает, что вы должны использовать набор инструментов Clang, а не GCC. - person Francesca Nannizzi; 07.04.2016
comment
Использование clang решило проблему, большое спасибо, я приму ваш ответ :-) - person Sam Khawase; 07.04.2016