Я пытаюсь кросс-компилировать нашу базу кода C ++ (используя CMake) для платформы Android, используя r5b NDK в Ubuntu 10.10.Фаза компиляции завершается успешно, однако на заключительном этапе компоновки для .so есть много неразрешенных ссылок на символы, которые находятся в libsupc ++. A файле (который я указываю для ссылки).Я также пробовал -lsupc ++ без различий.
Я пытался максимально точно следовать командной строке, сгенерированной официальной системой ndk-build, при создании тестового приложения test-gnustl-1 NDK.
Запуск инструмента arm-linux-androideabi-nm на arm-linux-androideabi / lib / libsupc ++. В файле отображаются символы, как определено (T), на которые есть ссылки в выводе ошибки.
AnПример символа, определенного в libsupc ++, который он не может найти: __gxx_personality_v0
Вот мой пример строки ссылки и полученный пример ошибок.
/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
`CMakeFiles/Foo.dir/Foo.cpp.o: In function 'myFunc':
/home/user/myroj/src/native/modules/libFoo/Foo.cpp:292: undefined reference to '__cxa_end_cleanup'
CMakeFiles/Foo.dir/Foo.cpp.o:(.ARM.extab.text.myFunc+0x0): undefined reference to '__gxx_personality_v0'
...
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/vector.tcc:350: undefined reference to '__cxa_begin_catch'
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/vector.tcc:357: undefined reference to '__cxa_rethrow'
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/stl_vector.h:1153: undefined reference to 'std::__throw_length_error(char const*)'
/home/user/android-ndk-r5b/toolchains/android/sources/cxx-stl/gnu-libstdc++/include/bits/stl_tree.h:199: undefined reference to 'std::_Rb_tree_decrement(std::_Rb_tree_node_base*)'
...
Я пытался создать простое приложение hello-world, которое использует исключения и ссылки в простом .a-файле.Я получал те же ошибки, пока не связал библиотеку libsupc ++. Напрямую вместо использования -lsupc ++.Тем не менее, этот же метод не работал на этапе связывания с большим проектом.Документы NDK также предлагают использовать '-lsupc ++' при использовании внешних инструментов сборки.
У меня нет идей о том, как решить эту проблему компоновки.Я пытался изменить порядок ссылок так, как мог.Я знаю, что связывание вообще может быть непостоянным процессом.Любая помощь с благодарностью.