Сообщение Re[3]: Android: ненависть, выраженная словами от 24.07.2018 16:32
Изменено 24.07.2018 16:46 eskimo82
Re[3]: Android: ненависть, выраженная словами
A>А нельзя ли поподробнее рассказать про этот процесс (показать пример makefile уровня "hello world")?
Из того что есть сейчас под рукой (первые два вариант не используют ифнфраструктуру NDK никак, последний вариант — стандартный для Андроида, вам он будет наиболее интересен):
* Пути к тулчейну для кроскомпиляции должны быть прописаны в текущем PATH:
** Для сборки стандартным make (linux).
*** Для сборки через ndk-build из NDK (window/linux).
Из того что есть сейчас под рукой (первые два вариант не используют ифнфраструктуру NDK никак, последний вариант — стандартный для Андроида, вам он будет наиболее интересен):
Пример 1: bash 4.3
Ничего делать не надо, кроме как правильно сконфигурить и сбилдить стандартными средствами*:./configure -prefix=/data/local --exec-prefix=/data/local/bin --host arm-linux-androideabi && make
* Пути к тулчейну для кроскомпиляции должны быть прописаны в текущем PATH:
configure:2767: checking build system type
configure:2781: result: i686-pc-linux-gnu
configure:2801: checking host system type
configure:2814: result: arm-unknown-linux-androideabi
configure:3403: checking for arm-linux-androideabi-gcc
configure:3430: result: /home/user/opt/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc
Пример 2: самописный make для сборки динамической либы
ANDROID_NDK ?= ~/opt/android-ndk-r9
TOOLCHAIN ?= $(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86_64
CROSSCOMPILE ?= $(TOOLCHAIN)/bin/arm-linux-androideabi-
SYSROOT ?= $(ANDROID_NDK)/platforms/android-18/arch-arm
#ANDROID_NDK ?= ~/opt/android-ndk-r10
#TOOLCHAIN ?= $(ANDROID_NDK)/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
#CROSSCOMPILE ?= $(TOOLCHAIN)/bin/aarch64-linux-android-
#SYSROOT ?= $(ANDROID_NDK)/platforms/android-L/arch-arm64
CC := $(CROSSCOMPILE)gcc --sysroot $(SYSROOT)
LD := $(CROSSCOMPILE)gcc --sysroot $(SYSROOT)
MD := mkdir -p
RM := rm -f
INCDIR := include
OBJDIR := obj
LIBDIR := lib
#LIBDIR := lib64
SRCDIR := src
LIBS :=
$(OBJDIR)/%.o: $(SRCDIR)/%.c
$(MD) $(dir $@)
$(CC) -std=c99 -c $< $(addprefix -I,$(GINCDIR) $(INCDIR)) -fPIC -o $@
SRCFILES := sample.c
TARGETSO := sample.so
OBJFILES := $(addprefix $(OBJDIR)/,$(SRCFILES:.c=.o))
$(LIBDIR)/$(TARGETSO): $(OBJFILES)
$(MD) $(dir $@)
$(LD) $^ $(addprefix -L,$(GLIBDIR) $(LIBDIR)) $(addprefix -l,$(LIBS)) -shared -o $@
.PHONY: all, clean
all: $(LIBDIR)/$(TARGETSO)
clean:
$(RM) $(OBJFILES)
# vim:noet:tw=80:ts=4:
** Для сборки стандартным make (linux).
Пример 3: Родной Android.mk из Native Activity
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-activity
LOCAL_SRC_FILES := main.c
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM
LOCAL_STATIC_LIBRARIES := android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
*** Для сборки через ndk-build из NDK (window/linux).
Re[3]: Android: ненависть, выраженная словами
A>А нельзя ли поподробнее рассказать про этот процесс (показать пример makefile уровня "hello world")?
Из того что есть сейчас под рукой (первые два варианта не используют инфраструктуру NDK никак, последний вариант — стандартный для Андроида, вам он будет наиболее интересен):
* Пути к тулчейну для кроскомпиляции должны быть прописаны в текущем PATH:
** Для сборки стандартным make (linux).
*** Для сборки через ndk-build из NDK (windows/linux).
Из того что есть сейчас под рукой (первые два варианта не используют инфраструктуру NDK никак, последний вариант — стандартный для Андроида, вам он будет наиболее интересен):
Пример 1: bash 4.3
Ничего делать не надо, кроме как правильно сконфигурить и сбилдить стандартными средствами*:./configure -prefix=/data/local --exec-prefix=/data/local/bin --host arm-linux-androideabi && make
* Пути к тулчейну для кроскомпиляции должны быть прописаны в текущем PATH:
configure:2767: checking build system type
configure:2781: result: i686-pc-linux-gnu
configure:2801: checking host system type
configure:2814: result: arm-unknown-linux-androideabi
configure:3403: checking for arm-linux-androideabi-gcc
configure:3430: result: /home/user/opt/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc
Пример 2: самописный make для сборки динамической либы
ANDROID_NDK ?= ~/opt/android-ndk-r9
TOOLCHAIN ?= $(ANDROID_NDK)/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86_64
CROSSCOMPILE ?= $(TOOLCHAIN)/bin/arm-linux-androideabi-
SYSROOT ?= $(ANDROID_NDK)/platforms/android-18/arch-arm
#ANDROID_NDK ?= ~/opt/android-ndk-r10
#TOOLCHAIN ?= $(ANDROID_NDK)/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
#CROSSCOMPILE ?= $(TOOLCHAIN)/bin/aarch64-linux-android-
#SYSROOT ?= $(ANDROID_NDK)/platforms/android-L/arch-arm64
CC := $(CROSSCOMPILE)gcc --sysroot $(SYSROOT)
LD := $(CROSSCOMPILE)gcc --sysroot $(SYSROOT)
MD := mkdir -p
RM := rm -f
INCDIR := include
OBJDIR := obj
LIBDIR := lib
#LIBDIR := lib64
SRCDIR := src
LIBS :=
$(OBJDIR)/%.o: $(SRCDIR)/%.c
$(MD) $(dir $@)
$(CC) -std=c99 -c $< $(addprefix -I,$(GINCDIR) $(INCDIR)) -fPIC -o $@
SRCFILES := sample.c
TARGETSO := sample.so
OBJFILES := $(addprefix $(OBJDIR)/,$(SRCFILES:.c=.o))
$(LIBDIR)/$(TARGETSO): $(OBJFILES)
$(MD) $(dir $@)
$(LD) $^ $(addprefix -L,$(GLIBDIR) $(LIBDIR)) $(addprefix -l,$(LIBS)) -shared -o $@
.PHONY: all, clean
all: $(LIBDIR)/$(TARGETSO)
clean:
$(RM) $(OBJFILES)
# vim:noet:tw=80:ts=4:
** Для сборки стандартным make (linux).
Пример 3: Родной Android.mk из Native Activity
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := native-activity
LOCAL_SRC_FILES := main.c
LOCAL_LDLIBS := -llog -landroid -lEGL -lGLESv1_CM
LOCAL_STATIC_LIBRARIES := android_native_app_glue
include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)
*** Для сборки через ndk-build из NDK (windows/linux).