2016-07-14 23 views
2

Wir caught a report von jemandem versucht, unser Projekt auf Android mit Autotools zu portieren. Unser Projekt ist eine C++ - Bibliothek, die STL verwendet, und Android veranlasst den Entwickler, eine C++ - und STL-Bibliothek auszuwählen. Das Projekt basiert auf Makefiles und verwendet keine Autotools. Stattdessen hat es published procedures for cross-compiling for Android.Wie spezifiziert man die STL-Bibliothek unter Android?

Der Schub von the report ist eine Header-Prüfung fehlgeschlagen. Wir glauben, dass dies fehlgeschlagen ist, da Autotools bei der Überprüfung keine STL-Bibliothek verwendet hat. Die STL-Bibliothek unterscheidet sich geringfügig von --sysroot. Sysroot wird viele Header und Bibliotheken enthalten, aber keine STL-Header oder Bibliotheken, weil ein Benutzer einen auswählen soll.

Ich würde gerne wissen, wie man Autotools anweist, eine bestimmte STL-Bibliothek auf Android zu verwenden, wenn es für das Ziel konfiguriert wird.

+0

Die Frage wurde auf der Autoconf Mailingliste SYSROOT ist, aber niemand antwortete. Siehe auch [C++ STL-Bibliothek für Android?] (Http://lists.gnu.org/archive/html/autoconf/2016-07/msg00003.html) – jww

+0

Ich würde 'make_standalone_toolchain.py' aus dem neuesten NDK empfehlen Freisetzung. Sie wählen die AWL-Implementierung mit '--stl = '. –

+0

Für dieses Projekt sieht es so aus, als ob Sie die AWL mit dem zweiten Argument zu 'setenv-android.sh' auswählen: https://github.com/weidai11/cryptopp/blob/master/setenv-android.sh#L268 –

Antwort

1

Die Antwort ist die Verwendung der eigenständigen Toolchain und Autotools. Zum Beispiel für den generischen Arm abi, auch mit C++ stl (gnu ist Standard):

1) Erstellen Sie zuerst Ihre Standalone-Toolchain mit was auch immer --stl Option, die Sie benötigen.

$> ${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) stellen die Werkzeugkette in den Weg, so können die Werkzeuge

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

2a) die $ TRIPLE env var hilfreich finden konfigurieren configure für Werkzeuge wie

${TRIPLE}-cc 
${TRIPLE}-ld 
Namen zu überprüfen

Wie Sie finden, wird den Werkzeugen im bin-Verzeichnis oben das Präfix "arm-linux-androideabi" vorangestellt. Also setze TRIPLE. In diesem Beispiel ist es

export TRIPLE=arm-linux-androideabi 

2b), wenn Sie $ TRIPLE nicht festlegen möchten, können Sie die CC gesetzt ist, CXX und CPP env vars auf die Versionen in Ihrem neuen Toolchain bin dir zu zeigen, oder Übergeben Sie sie zu konfigurieren (ich weiß nicht wie).

3) schließlich laufen Autotools und melden Sie es den Standalone-Toolkette verwenden, um es

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