Jak powiedzieć Androidowi NDK, aby używał innego zestawu narzędzi

Phonon 09/02/2017. 3 answers, 18.326 views
android android android-ndk android-ndk toolchain

Pobrałem niestandardowy toolchain ( linaro ), aby tworzyć aplikacje na Androida oparte na ARM. Jak mam powiedzieć NDK, aby z niego korzystać? Czy mogę zdefiniować lub ustawić coś w Android.mk i Application.mk, które pozwoliłyby mi to zrobić? Czy istnieje inny sposób?

1 Comments
corbin 03/08/2012
Czy robiłeś to w Ubuntu? Jak zainstalowałeś toolchain?

3 Answers


Peter M 03/01/2013.

Jak wspomina inna odpowiedź, toolchains są odkrywane przez ndk-build makefile w $(NDK_ROOT)/toolchains/ i możesz odzwierciedlać pomysły, które tam widzisz. Ale jest kilka interesujących pomysłów na wsparcie dla platform docelowych innych niż Android, które są interesujące, chociaż mogą być wkrótce nieaktualne, ponieważ ndk-build zaczyna jawnie obsługiwać inne platformy, takie jak mingw kierujące na win32 (lub inne kompilatory gcc skierowane na zwykły "ol linux") .

W config.mk :

TOOLCHAIN_ABIS := (list of ABIs that the toolchain supports) 

Jest to ważna definicja, ponieważ można użyć tej nazwy w pliku Application.mk do kompilacji przy użyciu zestawu narzędzi dla określonego ABI. Jedną z korzyści korupcji użycia tej definicji jest to, że ndk-build może jednocześnie budować dla wielu ABI. always zakłada się, że platforma jest systemem Android, ale jeśli chcesz kierować na win32 przy użyciu zestawu narzędzi opartego na mingw, możesz zdefiniować "ABI" jako x86-win32 , a następnie użyć tej ABI w pliku Application.mk aby wybrać ją jako dodatkową cel przez APP_ABI:= x86-win32 Następnie w plikach Android.mk możesz użyć definicji TARGET_ARCH_ABI aby wybrać konkretne źródła win32 i dołączyć ścieżki, na przykład:

ifeq ($(TARGET_ARCH_ABI),x86-win32)
  LOCAL_SRC_FILES += my_win32_file.c
  LOCAL_CFLAGS += -DSOME_WIN32_SPECIFIC
endif 

Ostatnim elementem jest to, że w setup.mk dla twojego toolchain, może być niewystarczające spojrzenie na inne toolchainy jako przykłady, ponieważ to, co setup.mk dla konkretnego toolchaina really robi, zastępuje ustawienia kompilacji w default-build-commands.mk , więc to, co chcesz zrobić, to sprawdzenie tego pliku i przedefiniowanie rzeczy, które mu się nie podobają.

Zgodnie z poprzednim przykładem, mingw nie obsługuje flagi noexec w plikach binarnych i możesz pozbyć się tej funkcji, dodając następujące wiersze w setup.mk :

# These flags are used to enforce the NX (no execute) security feature in the
# generated machine code. This adds a special section to the generated shared
# libraries that instruct the Linux kernel to disable code execution from
# the stack and the heap.
TARGET_NO_EXECUTE_CFLAGS  := # our platform doesn't support this flag!
TARGET_NO_EXECUTE_LDFLAGS := # our platform doesn't support this flag!

# These flags disable the above security feature
TARGET_DISABLE_NO_EXECUTE_CFLAGS  :=  # our platform doesn't support this flag!
TARGET_DISABLE_NO_EXECUTE_LDFLAGS :=  # our platform doesn't support this flag! 

Jest to tylko jeden z przykładów wielu funkcji w default-build-commands.mk które mogą wymagać nadpisania, i oczywiście ważne jest, aby dostarczyć TOOLCHAIN_NAME aby można było wybrać toolchain za pomocą zmiennej NDK_TOOLCHAIN wewnątrz pliku Application.mk do metodologii ABI wspomnę powyżej.


Ian Ni-Lewis 09/12/2013.

System plików Makefile NDK jest dość rozszerzalny i możesz zdefiniować inny zestaw narzędzi. Musisz zrozumieć, jak działa Make.

Toolchainy są odkrywane i inicjalizowane w linii build/core/init.mk 261 (w NDKr6, linia # może się zmieniać w przyszłych wersjach). Kod inicjujący wyszukuje pliki o nazwie config.mk w $(NDK_ROOT)/toolchains/* . Musisz więc dodać swoje toolchain do podkatalogu w katalogu narzędzi NDK i dodać do config.mk podkatalog config.mk i setup.mk . Zobacz przykłady toolchains/x86-4.4.3 i toolchains/arm-linux-androideabi-4.4.3 . Powinieneś być w stanie wyciąć i wkleić ARM toolchain config.mk i setup.mk jeśli twój toolchain ma standardowy układ.

Po zdefiniowaniu łańcucha narzędzi w katalogu toolchain możesz przejść do niego, ustawiając zmienną NDK_TOOLCHAIN w pliku Application.mk .


lily 07/31/2017.

cóż, możesz po prostu dodać "NDK_TOOLCHAIN_VERSION = 4.9" w swoim pliku Application.mk

Related questions

Hot questions

Language

Popular Tags