Неутешительное решение, но ... хорошо. : /

аюсь кросс-компилировать нашу кодовую базу 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), указанные в выводе ошибки.

Пример символа, определенного в 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 ++' при использовании внешних инструментов сборки.

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

Ответы на вопрос(1)

Ваш ответ на вопрос