Как вы компилируете консольную программу C ++ для запуска как процесс Android?

Я написал шахматный движок на C ++, который хочу скомпилировать для запуска в приложении «Шахматы для Android».

Вот выдержка из поста автора приложения, который очень очень грубо описывает, как запустить сторонний шахматный движок в своем приложении:

Наконец, разработчики могут выполнять всю разработку на C / C ++ и генерировать автономный собственный код, используя соответствующий набор инструментов компилятора (например, CodeSourcery для ARM или набор инструментов, который поставляется с NDK). Этот третий подход используется Chess для Android для импорта движков, которые не поставляются с приложением.

Шахматный движок — простая программа. Приложение запускается, пользователь посылает ему команды, программа думает, и будет выплевывать строку с деталями лучшего хода.

Мне НЕ нужно приложение с графикой или что-то еще. это ТОЛЬКО процесс, с которым общаются через stdin / stdout (на самом деле через каналы). Приложение «Шахматы для Android» заботится о том, чтобы поговорить с процессом, мне просто нужно выяснить, как в мире получить мой движок как процесс, который может запускаться приложением «Шахматы для Android».

5

Решение

Вы можете создать традиционную консольную программу для Android двумя способами.

  1. Использование системы ndk-build.

Вам нужно создать два дополнительных файла: Application.mk:

APP_ABI := armeabi-v7a
APP_PLATFORM := android-16
APP_STL := stlport_static
NDK_TOOLCHAIN_VERSION := 4.8

Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := <executable_name>
LOCAL_LDLIBS := -llog -lm # whatever libs you need
LOCAL_CFLAGS := -O3 -UNDEBUG # so on
LOCAL_C_INCLUDES := <list of a non-standard header directories>
LOCAL_SRC_FILES := <sources>
include $(BUILD_EXECUTABLE) # build executable instead of library

Первый описывает целевые ABI, целевой уровень Android, реализацию STL и выбирает набор инструментов сборки. Последний сам по себе является простым makefile, и это не должно сбивать с толку. Увидеть Вот для detais
Затем вы можете начать сборку с помощью следующей команды:

$ ndk-build NDK_PROJECT_PATH=path/to/intermediate/results/dir NDK_LIBS_OUT=path/to/output/dir APP_BUILD_SCRIPT=path/to/Android.mk NDK_APPLICATION_MK=path/to/Application.mk

Также обратите внимание, что ndk-build добавляет некоторые флаги по умолчанию. Чтобы проверить это — добавьте V=1 выше командной строки.

  1. Использование автономного набора инструментов.

Этот подход может быть полезен, если у вас уже есть система сборки для вашего проекта и вам нужен только кросс-компилятор. Чтобы подготовить отдельную цепочку, запустите, например, следующее:

$NDK/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=/tmp/my-android-toolchain

А теперь экспортируйте путь к инструментам:

$ export PATH=/tmp/my-android-toolchain/bin:$PATH
$ export CC=arm-linux-androideabi-gcc
$ export CXX=arm-linux-androideabi-g++

Больше информации Вот.

4

Другие решения

Я думаю, что ключевое утверждение находится на этой странице: UCI и XBoard Engine для Android

Для устройств Android на базе x86 (таких как Google TV) подойдет любой двоичный файл движка, скомпилированный для 32-разрядной Linux x86. Этот формат широко доступен для многих шахматных движков.

Это означает, что Chess для Android может использовать движки точно так же, как если бы они были скомпилированы для Linux. Это не так уж удивительно, поскольку Android основан на Linux и имеет встроенные API для Linux. Chess for Android использует эти API для запуска движков как обычные исполняемые файлы Linux.

Поэтому, если у вас 32-битная система Linux x86, а ваше устройство Android — устройство x86, просто скомпилируйте ваш движок в вашей системе Linux, как если бы вы использовали его локально, и установите его на свое устройство в соответствии с инструкциями на странице, на которую вы ссылались. ,

Тем не менее, ваше устройство Android, вероятно, не является устройством x86, это, вероятно, устройство ARM. В этом случае вам необходим кросс-компилятор, работающий на вашем компьютере, который может скомпилировать его в исполняемый файл Linux с ориентацией на ARM (это кратко описано в приведенной вами части). Кросс-компилятор скомпилирует ваш код так же, как и нативный компилятор, но полученный исполняемый файл будет содержать машинные инструкции для чипа ARM, а не для чипа x86, который есть у вас на компьютере.

Поскольку вы (предположительно) разрабатываете для Windows, возможно, будет наиболее удобно использовать кросс-компилятор Android NDK. Установите его в соответствии с его инструкциями (обратите внимание, что большинство инструкций по фактическому использованию NDK вам не нужны, поскольку вы не создаете нативные библиотеки для приложения Android, вы создаете обычный исполняемый файл Linux)

NDK включает в себя цепочку инструментов кросс-компиляции gcc. Вы будете использовать это для создания вашего собственного .exe. Убедитесь, что ваш PATH содержит папку в NDK, содержащую внешний интерфейс компилятора gcc. Затем, если исходный код вашего движка находится в файле engine.cc, вы сможете скомпилировать его в двоичный файл ARM с помощью такой команды:

gcc -o MyUCIEngine engine.cc

Возможно, вам придется установить еще несколько переменных среды, и фактическая команда для построения будет более сложной. Эта страница содержит дополнительную информацию, необходимую для запуска цепочки инструментов кросс-компиляции в NDK.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector