2016-07-14 1 views
2

Nous caught a report par quelqu'un essayant de porter notre projet sur Android avec Autotools. Notre projet est une bibliothèque C++ utilisant STL, et Android permet au développeur de choisir une bibliothèque C++ et STL. Le projet est basé sur makefile et n'utilise pas Autotools. Au lieu de cela, il a published procedures for cross-compiling for Android.Comment spécifier la bibliothèque STL sous Android?

La poussée de the report est une vérification d'en-tête échouée. Nous pensons qu'il a échoué car Autotools n'utilisait pas de bibliothèque STL lors de la vérification. La bibliothèque STL est légèrement différente de --sysroot. Sysroot comprend de nombreux en-têtes et bibliothèques, mais pas d'en-têtes ou de bibliothèques STL, car un utilisateur est supposé en sélectionner un.

Je voudrais savoir comment dire Autotools pour utiliser une bibliothèque STL spécifique sur Android lors de la configuration de la cible.

+0

La question a été posée sur la liste de diffusion Autoconf, mais personne ne répondit. Voir aussi [Bibliothèque STL C++ pour Android?] (Http://lists.gnu.org/archive/html/autoconf/2016-07/msg00003.html) – jww

+0

Je recommanderais d'utiliser 'make_standalone_toolchain.py' à partir du dernier NDK Libération. Vous sélectionnez l'implémentation STL avec '--stl = '. –

+0

Pour ce projet, il semble que vous sélectionnez la STL avec le second argument de 'setenv-android.sh': https://github.com/weidai11/cryptopp/blob/master/setenv-android.sh#L268 –

Répondre

1

la réponse est d'utiliser à la fois la chaîne d'outils autonome et autotools. Par exemple pour le bras générique abi, utilisant aussi C++ stl (gnu est par défaut):

1) créez d'abord votre chaîne d'outils autonome avec l'option --stl dont vous avez besoin.

$> ${ANDROID_NDK_ROOT}/build/tools/make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.9 --stl=libc++ --platform=android-21 --install-dir=${PWD}/tools/ --force 

2) mettre l'ensemble des outils dans votre chemin Configurons peut trouver les outils

export PATH=${PWD}/tools/bin:${PATH} 

2a) du var env TRIPLE $ est utile pour configurer pour vérifier les outils nommés comme

${TRIPLE}-cc 
${TRIPLE}-ld 

comme vous trouverez les outils dans le répertoire bin ci-dessus sont préfixés par "arm-linux-androideabi". Alors réglez TRIPLE. Dans cet exemple, il est

export TRIPLE=arm-linux-androideabi 

2b) si vous ne voulez pas définir $ TRIPLE, vous devez définir le CC, CXX et env CPP vars pour pointer vers les versions dans votre nouveau bac toolchain dir ou passez-les à configurer (je ne sais pas comment).

3) enfin courir autotools et lui dire d'utiliser l'ensemble des outils autonomes pour cela SYSROOT

$>./configure --with-sysroot=${PWD}/tools/sysroot --host=${TRIPLE} ...