Информация об изменениях

Сообщение Re[3]: Android: ненависть, выраженная словами от 24.07.2018 16:32

Изменено 24.07.2018 16:46 eskimo82

Re[3]: Android: ненависть, выраженная словами
A>А нельзя ли поподробнее рассказать про этот процесс (показать пример makefile уровня "hello world")?
Из того что есть сейчас под рукой (первые два вариант не используют ифнфраструктуру 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 никак, последний вариант — стандартный для Андроида, вам он будет наиболее интересен):

Пример 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).