Ich entwickle einige native Bibliotheken für Android und verwende Boost-Bibliotheken - nur Header-basierte. Das Problem, mit dem ich konfrontiert bin, ist, dass, wenn ich versuche, einige meiner nativen Bibliotheken mit einer Systembibliothek zu verbinden, die UnsatisfiedLinkError
geworfen wird. Es liegt an verschiedenen C ++ - Laufzeiten, wie in der NDK-Dokumentation angegeben:
Sie können nur eine einzige C ++ - Laufzeit auswählen, die Ihr gesamter Code enthält darauf ankommen. Es ist nicht möglich, gemeinsam genutzte Bibliotheken zu mischen verschiedene C ++ Laufzeiten.
Systembibliotheken verwenden RTTI und Exceptions nicht, aber meine Bibliotheken verwenden sie implizit.
Ich weiß, dass es Makros BOOST_EXCEPTION_DISABLE
und BOOST_NO_RTTI
gibt, aber ich bin nicht in der Lage, es zum Funktionieren zu bringen. Ich habe versucht, sie als Compilerflags und auch in der config.hpp zu setzen, aber ohne Glück - immer noch viele Fehler wie
Wie kann ich diese Funktionen in Boost deaktivieren, ist das überhaupt möglich?
Die Antwort ist "vielleicht". Einige Boost-Bibliotheken funktionieren mit deaktivierten Ausnahmen - einige nicht. Das Gleiche gilt für RTTI.
Ich schlage vor, Sie überprüfen die Dokumentation für die speziellen Boost-Bibliotheken, die Sie interessieren.
Zum Beispiel arbeitet Boost.Array mit Ausnahmen deaktiviert, aber Boost.Format nicht.
Wenn Sie Nachrichten wie cannot use typeid with -fno-rtti
erhalten, wird dies wahrscheinlich beim Kompilieren eines Teils von Boost sein, der RTTI erfordert. Wo der Fehler auftritt, wird Ihnen (normalerweise) sagen, welche Bibliothek.
Tags und Links c++ android-ndk boost