Ich versuche, unsere C ++ - Code-Basis (mit CMake) für die Android-Plattform mit dem r5b NDK unter Ubuntu 10.10 zu kompilieren. Die Kompilierphase ist erfolgreich, jedoch gibt es während der letzten Verbindungsphase für die .so viele ungelöste Verweise auf Symbole, die in der Datei libsupc ++. A liegen (die ich zum Verknüpfen angebe). Ich habe auch -lsupc ++ ohne Unterschied versucht.
Ich habe versucht, der Befehlszeile so genau wie möglich zu folgen, wie sie vom offiziellen ndk-build-System beim Erstellen der test-gnustl-1 NDK-Test-App generiert wurde.
Ausführen des Werkzeugs arm-linux-androideabi-nm auf dem Arm-linux-androideabi / lib / libsupc ++. Eine Datei zeigt die Symbole an, die in der Fehlerausgabe als definiert (T) bezeichnet wurden.
Ein Beispiel für ein in libsupc ++ definiertes Symbol, das nicht gefunden werden kann, ist: __gxx_personality_v0
Hier ist meine Beispiel-Link-Zeile und eine resultierende Fehlerprobe.
/home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-g++ -fPIC -Wall -Wextra -Wno-unused -Wno-multichar -fno-rtti -MMD -MP -MF -ffunction-sections -fexceptions -funwind-tables -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Wa,--noexecstack -DANDROID -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -O0 -DDEBUG -D_DEBUG -g --sysroot=/home/user/android-ndk-r5b/platforms/android-9/arch-arm -Wl,--gc-sections -Wl,-z,nocopyreloc -Wl,--no-undefined,-z,noexecstack -L/home/user/android-ndk-r5b/platforms/android-9/arch-arm/usr/lib -L/home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib -Wl,-rpath-link=/home/user/android-ndk-r5b/platforms/android-9/arch-arm/usr/lib /home/user/android-ndk-r5b/sources/cxx-stl/gnu-libstdc++/libs/armeabi/libstdc++.a -lc -lsupc++ -shared -o ../../lib/Debug/libFoo.so CMakeFiles/Foo.dir/Foo.c.o CMakeFiles/Foo.dir/Bar.cpp.o CMakeFiles/Foo.dir/Baz.cpp.o
Ich habe versucht, eine einfache Hallo-Welt-App zu erstellen, die Ausnahmen und Links in einer einfachen .a-Datei verwendet. Ich habe die gleichen Fehler, bis ich in der libsupc ++. Eine Bibliothek direkt anstelle von '-lsupc ++' verlinkt. Die gleiche Technik funktionierte jedoch bei dem größeren Projektverbindungsschritt nicht. Die NDK-Dokumente schlagen außerdem vor, dass '-lsupc ++' verwendet werden sollte, wenn externe Build-Tools verwendet werden.
Ich habe keine Ideen, wie ich dieses Verknüpfungsproblem lösen könnte. Ich habe versucht, die Verbindungslinie so zu ändern, wie ich es mir vorstellen kann. Ich weiß, dass das Verknüpfen im Allgemeinen ein unbeständiger Prozess sein kann. Jede Hilfe wird sehr geschätzt.
Es stellte sich heraus, dass ich -L/home/user/android-ndk-r5b/sources/cxx-stl/gnu-libstdc++/libs/armeabi"
zum Pfad hinzufügen und explizit "/ home/user/android-ndk-r5b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib/thumb/libsupc++.a
" mit allen Include-Bibliotheken verknüpfen musste, die in eine " --start-group --end-group
" -Klausel eingeschlossen waren.
Hoffentlich hilft das auch jemand anderem.
Tags und Links android-ndk android-ndk-r5