Внешняя сборка Android NDK r5b и проблема ссылки supc ++

я пытаюсь кросс-компилировать нашу базу кода C ++ (используя CMake) для платформы Android, используя r5b NDK в Ubuntu 10.10. Фаза компиляции проходит успешно, однако во время финальной фазы компоновки для. Поэтому существует много неразрешенных ссылок на символы, которые находятся в файле libsupc ++. A (который я указываю для ссылки). Я также попробовал -lsupc ++ без разницы.

Я попытался максимально точно следовать командной строке, сгенерированной официальной системой ndk-build, при создании тестового приложения test-gnustl-1 NDK.

Запуск инструмент arm-linux-androideabi-nm на arm-linux-androidabi / lib / libsupc ++. файл показывает символы в том виде, как они определены (T), на которые есть ссылка в выводе ошибки.

Пример символа, определенного в libsupc ++, он не может найти: __ gxx_personality_v0

Вот мой пример строки ссылки и полученный образец ошибок.

/home/user/android-ndk-r5b/toolchains/arm-linux-androidabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androidabi-g++ -fPIC -Wall -Wextra -Wno- неиспользуемый -Wno-multichar -fno-rtti -MMD -MP -MF -ffunction-section -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 -b5 / android / user / rus / rt / android платформы / android-9 / arch-arm -Wl, - gc-section -Wl, -z, nocopyreloc -Wl, - no-undefined, -z, noexecstack -L / home / user / android-ndk-r5b / платформы / android-9 / arch-arm / usr / lib -L / home / user / android-ndk-r5b / toolchains / arm-linux-androideabi-4.4.3 / prebuilt / linux-x86 / arm-linux-androidabi / lib -Wl, -rpath-link = / home / user / android-ndk-r5b / platform / 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/De bug / libFoo.so CMakeFiles / Foo.dir / Foo.co 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 ++' при использовании внешних инструментов сборки.

У меня нет идей, как решить эту проблему связывания. Я пробовал переупорядочивать линию ссылок всеми возможными способами. Я знаю, что создание ссылок в целом может быть непостоянным процессом. Любая помощь приветствуется.

8
задан androider 3 June 2011 в 23:15
поделиться