Неудовлетворительная ошибка связи на Android при использовании STL в natives (NDK) при использовании автономного набора инструментов - PullRequest
0 голосов
/ 22 ноября 2011

Я получаю сообщение об ошибке неудовлетворительной связи при попытке запустить приложение на C ++ для Android.Проблема появляется, только если я использую какой-либо механизм STL, когда я закомментирую все std::vector и т. Д., Проблема исчезает.

РЕДАКТИРОВАТЬ: я обнаружил, что это касается всего C ++, а не только STL (т.е.new operator также вызывает ошибку неудовлетворительной связи)

Я использую собственный автономный набор инструментов для создания двоичного файла (для Android 1.6) и связываю его с libstdc++.a, libGLESv1_CM.a, liblog.a и libm.a.

В Java я звоню:

static {
    System.loadLibrary("GLESv1_CM");
    System.loadLibrary("Game");
}

Точный порядок сборки:

engine_sources -> libengine.a

game_sources + libengine.a + all mentioned libraries (using --whole-archive for each) -> libGame.so

Java_framework + libGame.so -> Game.apk

Есть что-то, чего я пропускаю?

Edit2: Как предложено в http://mpigulski.blogspot.com/2010/09/debugging-dlopen-unsatisfiedlinkerror.html, я запускаю arm-linux-androideabi-ld.exe libGame.so и получил это:

arm-linux-androideabi-ld.exe: warning: cannot find entry symbol _start; defaulting to 00008270
libGame.so: undefined reference to `__aeabi_fadd'
libGame.so: undefined reference to `__aeabi_fcmpgt'
libGame.so: undefined reference to `__aeabi_i2f'
libGame.so: undefined reference to `__aeabi_dmul'
libGame.so: undefined reference to `__aeabi_d2f'
libGame.so: undefined reference to `vtable for OpenGLRenderer'
libGame.so: undefined reference to `__aeabi_fsub'
libGame.so: undefined reference to `__aeabi_idiv'
libGame.so: undefined reference to `__aeabi_fdiv'
libGame.so: undefined reference to `__aeabi_uidiv'
libGame.so: undefined reference to `__aeabi_fcmpeq'
libGame.so: undefined reference to `__aeabi_fmul'
libGame.so: undefined reference to `__aeabi_fcmplt'
libGame.so: undefined reference to `__aeabi_f2d'

Я особенно обеспокоен тем, что

libGame.so: undefined reference to `vtable for OpenGLRenderer'

OpenGLRenderer является потомкомабстрактный класс, который я создаю с new.Я что-то здесь упускаю?

Ответы [ 2 ]

3 голосов
/ 26 февраля 2012

Если люди ищут libsupc ++. A, вы можете найти его в:

./sources/cxx-stl/gnu-libstdc++/libs/

Здесь вы также найдете libgnustl_shared.so (извините, не могу добавить комментарии к предыдущему ответу, недостаточно повторений)

2 голосов
/ 23 ноября 2011

Возможно, вы пропустили libsupc++.a.Требуется для rtti и исключений.Вы должны явно отключить rtti и исключения (-fno-rtti -fno-exceptions) или создать ссылку на эту библиотеку.

...