Kompilieren von STXXL unter Android NDK r8b

9

Ich versuche STXXL unter Android NDK r8b zu kompilieren (ich habe das selbe Problem unter dem neueren r8c btw).

Ich kompiliere mit gnustl_static.

Ich brauche C ++ 11-Unterstützung, also habe ich anfangs versucht,

zu setzen %Vor%

aber das hat einen Fehler über uint64_t ausgelöst.

Also habe ich die Flagge zu

geändert %Vor%

Das hilft ein bisschen, aber wenn es zu kompilieren beginnt, bekomme ich einen Fehler bezüglich der gnu stl.

%Vor%

Ich bekomme auch eine ganze Menge mehr Fehler in Bezug auf diesen _Arg-Parameter.

Wenn Sie sich die erste Funktion ansehen, sieht die Funktion folgendermaßen aus:

%Vor%

Ich kann nicht wirklich verstehen, wo das Problem auftaucht. Definiert gnu ++ 11 __GXX_EXPERIMENTAL_CXX0X__ nicht? Oder ist das Problem, dass es nicht irgendwo richtig verwendet wird? Ich bin sehr verwirrt, was das Problem verursacht? Ich habe STXXL kompilieren mit gnu ++ 11 unter Claming auf dem iPhone, aber ich denke, dass iPhone wahrscheinlich eine andere STL-Implementierung verwendet. Hat jemand irgendwelche Ideen, wie ich dieses Problem beheben kann?

Wenn Sie weitere Informationen benötigen, fragen Sie einfach!

Bearbeiten: Also weiter zu einem der Kommentare hier ist meine application.mk

%Vor%

und das ist mein android.mk:

%Vor%

Bearbeiten: Interessanterweise habe ich gerade versucht, ein #error temp in den #ifdef __GXX_EXPERIMENTAL_CXX0X__ -Block in der von mir geposteten Funktion stl_tree.h einzufügen. Der Compiler wirft keinen Fehler auf diesen Teil ... also wird die Definition nie gesetzt, was vermutlich die Ursache meiner Probleme ist. Ich habe auch speziell -D__GXX_EXPERIMENTAL_CXX0X__ hinzugefügt, aber das macht keinen Unterschied (es ist, als ob es undef'd wird).

    
Goz 15.11.2012, 08:33
quelle

1 Antwort

4

Ich denke, Ihr Ansatz ist zu optimistisch. Ich weiß nichts über STXXL, aber jedes nicht-triviale Projekt hat viele Details in seinen eigenen Makefiles, deshalb sollte es nicht funktionieren, wenn man sein eigenes Android.mk wirft und versucht, alle möglichen Quellcode-Dateien zu integrieren.

>

Wenn Sie ndk-build verwenden möchten, sollten Sie das Projekt sorgfältig studieren und seine Details verstehen und diese in Ihre neue Android.mk-Datei integrieren. Wenn Sie beispielsweise das Verzeichnis external unter dem Android-Repository ( in github als mehrere Unterprojekte aufgeführt) markieren, können Sie viele Open-Source-Projekte sehen und wie sie in Android-Build-System eingeführt werden.

Nach langer und langweiliger Nachricht würde ich vorschlagen, NDK als eigenständige Werkzeugkette zu verwenden. Sie können über dieses $NDK/docs/STANDALONE-TOOLCHAIN.html lesen. Kurz gesagt konnte ich STLXX als statische Bibliothek über den folgenden Befehl kompilieren (mein ndk wurde in ~ / bin installiert)

  
    

NDK = ~ / bin / android-ndk-r8c PTHREAD_FLAG = KOMPILER="$ NDK / toolchains / arm-linux-androideabi-4.6 / vorgebaut / linux-x86 / bin / arm-linux-androideabi-g ++ --sysroot = $ NDK / Plattformen / android-14 / arch-arm -I $ NDK / Quellen / cxx-stl / gnu-libstdc ++ / 4.6 / include -I $ NDK / Quellen / cxx-stl / gnu-libstdc ++ / 4.6 / libs / armeabi / include -L $ NDK / Quellen / cxx-stl / gnu-libstdc ++ / 4.6 / libs / armeabi / -lgnustl_shared "make library_g ++

  

Beim ersten Build tritt ein Fehler in der Datei ./io/ufs_file_base.cpp auf. Es gibt einige veraltete Verwendungen von S_IREAD und S_IWRITE , die von Android / Bionic nicht unterstützt werden. Siehe Fehlerbericht und reference .

Sie sollten die Zeile 88 wie folgt aktualisieren

%Vor%

dann

%Vor%

Jetzt solltest du libstxxl.a unter lib bekommen. Ich weiß nicht, ob das wirklich funktioniert oder nicht, aber da dies eine Build-Frage war, hoffe ich, dass es dir Antworten gibt oder dir ein paar Anweisungen gibt.

Eine letzte Anmerkung betrifft ARM EABIs. Der obige Befehl verwendet armeabi , wie Sie in den angegebenen Verzeichnissen sehen können. Möglicherweise möchten Sie armeabi-v7a verwenden, wenn dies für Ihr Ziel zutreffend ist, da es neuer ist. Anhand Ihrer Fehlermeldungen kann ich sehen, dass ein bestimmter Build auf xscale abzielte. Wenn das nicht beabsichtigt ist, ist es vielleicht eine gute Idee, sich mit ARM-Architektur / Produktfamilien vertraut zu machen.

    
auselen 21.11.2012, 14:39
quelle

Tags und Links