Я получаю сообщение об ошибке неудовлетворительной связи при попытке запустить приложение на 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
.Я что-то здесь упускаю?