Dies ist mehr eine Antwort als eine Frage, denn ich habe es herausgefunden, zumindest so sauber wie die Bibliothek kompilieren. Das Hauptproblem für mich war, dass shared_ptr funktioniert.So verwenden Sie die Boost-Bibliothek (einschließlich shared_ptr) mit dem Android NDK und STLport
Zutaten:
Boost-v 1.45.0
Die Version von STLport bei http://www.anddev.org/viewtopic.php?p=29939..
Version r4b des NDK.
Anfahrt:
In Ihrer Android.mk Datei hinzufügen:
LOCAL_CFLAGS += -DBOOST_EXCEPTION_DISABLE -D_STLP_NO_EXCEPTIONS -DOS_ANDROID -D_STLP_USE_SIMPLE_NODE_ALLOC
den Anruf entfernen in Zeile 613 von STLport/stl/_string.h __stl_throw_length_error. Sie können _STLP_NO_EXCEPTIONS verwenden, wenn Sie möchten.
Bearbeiten Sie boost/boost/smart_ptr/shared_ptr.hpp nach Zeile 261, um den Aufruf von boost :: throw_exception im shared_ptr -Konstruktor loszuwerden. Ich habe #ifndef BOOST_EXCEPTION_DISABLE um den gesamten Körper der Methode verwendet. (Aber sehen Sie die Antwort unten.)
Als nächstes müssen Sie einige fehlende Teile liefern. Erstellen Sie eine Headerdatei mit folgendem:
#ifdef OS_ANDROID
#include <exception>
namespace std
{
struct bad_alloc : public exception { bad_alloc operator()(){}};
}
#endif
und eine Quelldatei mit einer abgespeckten Ausnahmeklasse bad_alloc zu unterstützen:
#ifdef OS_ANDROID
#include <exception>
namespace std
{
exception::exception() {}
exception::~exception() {}
const char* exception::what() const {}
}
#endif
Fügen Sie den Header, wo Sie mit boost/shared_ptr.hpp . Kompilieren Sie die Quelle und fügen Sie sie Ihrer Bibliothek hinzu.
Um diese Frage zu verhindern, immer offen zu sein, wäre es sehr cool, wenn Sie diesen Beitrag als Frage umformulieren könnten und es dann selbst beantworten, wie sie in der [FAQ] (http vorgeschlagen: // stackoverflow.com/faq#ask). – dennycrane
Danke für das Teilen, was Sie gelernt haben! Ich bin mir sicher, dass dies für viele hilfreich ist. –
Dennycrane, ich experimentiere immer noch mit diesem Ansatz, also möchte ich es offen lassen, falls es mehr hinzuzufügen gibt. Wenn ich eine sauber laufende Bibliothek bekomme, melde ich das und schließe die Frage mit einer Antwort. –