Πώς να πείτε στο Android NDK τη χρήση διαφορετικής αλυσίδας εργαλείων

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

Έχω κατεβάσει ένα προσαρμοσμένο toolchain ( linaro ) για την κατασκευή εφαρμογών Android βασισμένων σε ARM. Πώς μπορώ να πω στο NDK να το χρησιμοποιήσει; Μπορώ να ορίσω ή να ορίσω κάτι στο Android.mk και το Application.mk που θα μου επιτρέψει να το κάνω αυτό; Υπάρχει άλλος τρόπος;

1 Comments
corbin 03/08/2012
Το κάνατε αυτό στο Ubuntu; Πώς εγκαταστήσατε την εργαλειοθήκη;

3 Answers


Peter M 03/01/2013.

Όπως αναφέρει η άλλη απάντηση, τα εργαλεία $(NDK_ROOT)/toolchains/ από το ndk-build makefile στο $(NDK_ROOT)/toolchains/ και μπορείτε να αντικατοπτρίσετε τις ιδέες που βλέπετε εκεί. Υπάρχουν όμως μερικές επιπλέον ιδέες για την υποστήριξη μη πλατφορμών στόχων Android που είναι ενδιαφέρουσες, παρόλο που ενδέχεται να είναι σύντομα ξεπερασμένες, καθώς το ndk-build αρχίζει να υποστηρίζει ρητά άλλες πλατφόρμες, όπως η στόχευση mingw win32 (ή άλλοι gcc μεταγλωττιστές που στοχεύουν στην απλή linux linux) .

Στο config.mk :

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

Αυτός είναι ένας σημαντικός ορισμός, επειδή μπορείτε να χρησιμοποιήσετε αυτό το όνομα στο Application.mk για να δημιουργήσετε χρησιμοποιώντας την εργαλειομηχανή για ένα συγκεκριμένο ABI. Ένα από τα οφέλη της καταστροφής της χρήσης αυτού του ορισμού είναι ότι το ndk-build μπορεί ταυτόχρονα να δημιουργήσει για πολλαπλά ABI. always υποθέτει ότι η πλατφόρμα είναι Android, αλλά αν θέλετε να στοχεύσετε το win32 χρησιμοποιώντας μια εργαλειομηχανή που βασίζεται σε mingw, μπορείτε να ορίσετε ένα "ABI" ως x86-win32 και στη συνέχεια να χρησιμοποιήσετε αυτό το ABI στο Application.mk για να το επιλέξετε ως πρόσθετο στόχος μέσω APP_ABI:= x86-win32 Στη συνέχεια στα αρχεία Android.mk μπορείτε να χρησιμοποιήσετε τον ορισμό TARGET_ARCH_ABI για να επιλέξετε win32 συγκεκριμένες πηγές και να συμπεριλάβετε διαδρομές, για παράδειγμα:

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

Το τελευταίο κομμάτι είναι ότι στο setup.mk για την εργαλειοθήκη σας, μπορεί να μην επαρκεί να δούμε άλλα παραδείγματα εργαλείων, διότι ό, τι setup.mk κάνει η setup.mk για ένα συγκεκριμένο εργαλείο είναι η αντικατάσταση των ρυθμίσεων δημιουργίας στο default-build-commands.mk , έτσι αυτό που θέλετε να κάνετε είναι να επιθεωρήσετε αυτό το αρχείο και να επαναπροσδιορίσετε τα πράγματα σε αυτό που δεν σας αρέσει.

Ακολουθώντας το προηγούμενο παράδειγμα, το mingw δεν υποστηρίζει τη σημαία noexec στα δυαδικά αρχεία και μπορείτε να απαλλαγείτε από αυτή τη δυνατότητα προσθέτοντας τις παρακάτω γραμμές στο 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! 

Αυτό είναι μόνο ένα παράδειγμα των πολλών χαρακτηριστικών στο default-build-commands.mk που μπορεί να χρειαστεί να αντικατασταθούν και φυσικά είναι σημαντικό να παρέχετε το TOOLCHAIN_NAME έτσι ώστε η σειρά εργαλείων να μπορεί να επιλεγεί μέσω της μεταβλητής NDK_TOOLCHAIN μέσα στο αρχείο Application.mk σας επιπλέον στη μεθοδολογία ABI που αναφέρω παραπάνω.


Ian Ni-Lewis 09/12/2013.

Το σύστημα makefile NDK είναι αρκετά επεκτάσιμο και μπορείτε να ορίσετε μια διαφορετική σειρά εργαλείων. Θα χρειαστεί κάποια κατανόηση για το πώς Κάνε έργα.

Τα build/core/init.mk και αρχικοποιούνται στη γραμμή build/core/init.mk 261 (στο NDKr6, η γραμμή # μπορεί να αλλάξει σε μελλοντικές εκδόσεις). Ο κώδικας εκκίνησης αναζητά αρχεία με όνομα config.mk κάτω από $(NDK_ROOT)/toolchains/* . Έτσι, θα πρέπει να προσθέσετε την εργαλειοθήκη σας σε έναν υποκατάλογο κάτω από τον κατάλογο εργαλείων NDK και να προσθέσετε ένα config.mk και setup.mk σε αυτόν τον υποκατάλογο. Δείτε για toolchains/x86-4.4.3 και τα toolchains/arm-linux-androideabi-4.4.3 για παραδείγματα. Θα πρέπει να είστε σε θέση να κόψετε και να επικολλήσετε το εργαλείο ARM config.mk και setup.mk εάν η εργαλειοθήκη σας έχει μια τυποποιημένη διάταξη.

Μόλις ορίσετε μια ομάδα εργαλείων στον κατάλογο εργαλείων, μπορείτε να μεταβείτε σε αυτήν ρυθμίζοντας τη μεταβλητή NDK_TOOLCHAIN μέσα στο αρχείο Application.mk .


lily 07/31/2017.

καλά, μπορείτε απλά να προσθέσετε "NDK_TOOLCHAIN_VERSION = 4.9" στο Application.mk

Related questions

Hot questions

Language

Popular Tags