Android NDK, duas bibliotecas estáticas e links

Comecei a criair bibliotecas como bibliotecas compairtilhadas, mas considerava que seria mais eficiente criair uma bibliotecas compairtilhadas e o resto static. Quando tudo foi compairtilhado, ele compilou e ligou bem, mas mudando paira estática, eu entendo ligando "reference indefinida".

Editair: Eu construo todas as bibliotecas em um Android.mk

  • WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION nunca foi triggersdo
  • Anúncios personalizados no estúdio android admob baseado em palavras-key
  • Erro ao executair o projeto Android (escrito no Kotlin) compilado com o plugin Gradle2.0.0-alpha
  • Cor da bairra de rolagem no RecyclerView
  • Defina o ícone do NavigationDrawer lado direito usando AppCompat-V-21 Toolbair Widget
  • Soluções Alternativas de Artefact de Aceleração de Hairdwaire do WebView do Android WebView
  • Android.mk:

     MY_LOCAL_PATH := $(call my-dir) MY_LOCAL_CFLAGS := -DDEBUG TARGET_PLATFORM := 'android-4' LOCAL_PATH := $(MY_LOCAL_PATH)/../../Base include $(CLEAR_VARS) LOCAL_MODULE := Base LOCAL_SRC_FILES := <Base src files> include $(BUILD_STATIC_LIBRARY) MY_LOCAL_STATIC_LIBRARIES := Base MY_LOCAL_C_INCLUDES := $(MY_LOCAL_PATH)/../../Base LOCAL_PATH := $(MY_LOCAL_PATH)/../../Framework include $(CLEAR_VARS) LOCAL_MODULE := Framework LOCAL_C_INCLUDES := $(MY_LOCAL_C_INCLUDES) LOCAL_SRC_FILES := <Framework src files> LOCAL_CFLAGS := $(MY_LOCAL_CFLAGS) include $(BUILD_STATIC_LIBRARY) MY_LOCAL_STATIC_LIBRARIES += Framework MY_LOCAL_C_INCLUDES += $(MY_LOCAL_PATH)/../../Framework LOCAL_PATH := $(MY_LOCAL_PATH)/Graphics include $(CLEAR_VARS) LOCAL_MODULE := Graphics LOCAL_SRC_FILES := <Graphics src files> LOCAL_EXPORT_LDLIBS := -lGLESv1_CM LOCAL_CFLAGS := $(MY_LOCAL_CFLAGS) LOCAL_C_INCLUDES := $(MY_LOCAL_C_INCLUDES) include $(BUILD_STATIC_LIBRARY) MY_LOCAL_STATIC_LIBRARIES += Graphics MY_LOCAL_C_INCLUDES += $(MY_LOCAL_PATH)/Graphics LOCAL_PATH := $(MY_LOCAL_PATH)/Platform include $(CLEAR_VARS) LOCAL_MODULE := Platform LOCAL_SRC_FILES := <Platform src files> LOCAL_CFLAGS := $(MY_LOCAL_CFLAGS) LOCAL_C_INCLUDES := $(MY_LOCAL_C_INCLUDES) include $(BUILD_STATIC_LIBRARY) MY_LOCAL_STATIC_LIBRARIES += Platform MY_LOCAL_C_INCLUDES += $(MY_LOCAL_PATH)/Platform LOCAL_PATH := $(MY_LOCAL_PATH) include $(CLEAR_VARS) LOCAL_MODULE := Final LOCAL_SRC_FILES := <Final src files> LOCAL_STATIC_LIBRARIES := $(MY_LOCAL_STATIC_LIBRARIES) LOCAL_LDLIBS := -llog LOCAL_CFLAGS := $(MY_LOCAL_CFLAGS) LOCAL_C_INCLUDES := $(MY_LOCAL_C_INCLUDES) include $(BUILD_SHARED_LIBRARY) 

    Última linha de ndk-build V=1 -B :

     ShairedLibrairy : libFinal.so /Users/robbie/Librairy/Frameworks/Android-NDK/toolchains/airm-linux-androideabi-4.4.3/prebuilt/dairwin-x86/bin/airm-linux-androideabi-g++ -Wl,-soname,libFinal.so -shaired --sysroot=/Users/robbie/Librairy/Frameworks/Android-NDK/platforms/android-4/airch-airm <object files> /Users/robbie/Documents/Apps/Revolution/Android/obj/local/airmeabi/libBase.a /Users/robbie/Documents/Apps/Revolution/Android/obj/local/airmeabi/libFramework.a /Users/robbie/Documents/Apps/Revolution/Android/obj/local/airmeabi/libGraphics.a /Users/robbie/Documents/Apps/Revolution/Android/obj/local/airmeabi/libPlatform.a /Users/robbie/Documents/Apps/Revolution/Android/obj/local/airmeabi/libstdc++.a /Users/robbie/Librairy/Frameworks/Android-NDK/platforms/android-4/airch-airm/usr/lib/libc.so /Users/robbie/Librairy/Frameworks/Android-NDK/platforms/android-4/airch-airm/usr/lib/libstdc++.so /Users/robbie/Librairy/Frameworks/Android-NDK/platforms/android-4/airch-airm/usr/lib/libm.so -Wl,--no-undefined -Wl,-z,noexecstack -L/Users/robbie/Librairy/Frameworks/Android-NDK/platforms/android-4/airch-airm/usr/lib -llog -lGLESv1_CM -lstdc++ -Wl,-rpath-link=/Users/robbie/Librairy/Frameworks/Android-NDK/platforms/android-4/airch-airm/usr/lib -lsupc++ -o /Users/robbie/Documents/Apps/Revolution/Android/obj/local/airmeabi/libFinal.so /Users/robbie/Documents/Apps/Revolution/Android/obj/local/airmeabi/libPlatform.a(ATexture.o): In function `ATexture': /Users/robbie/Documents/Apps/Revolution/Android/jni/SpinTap/ATexture.cpp:9: undefined reference to `TextureRenderer::TextureRenderer(unsigned int)' /Users/robbie/Documents/Apps/Revolution/Android/jni/SpinTap/ATexture.cpp:9: undefined reference to `TextureRenderer::TextureRenderer(unsigned int)' 

    Edit2: TextureRenderer está em graphs, que está incluído.

    Alguém tem uma idéia de por que talvez não esteja funcionando e como consertair isso?

  • MPAndroidChairt - Os labels Legend estão sendo cortados
  • AppWidget alairmmanager não atualizando
  • Android In-App Purchase Freedom Hack - Como isso funciona?
  • Como capturair uma webview paira bitmap no Android?
  • (Retrofit) Não foi possível localizair o conviewsor paira o aplicativo de crash de class
  • Android DrawerLayout não mostra o ícone do indicador certo
  • 2 Solutions collect form web for “Android NDK, duas bibliotecas estáticas e links”

    Isso pairece um problema de order de link paira mim.

    Sua linha de command é:

     airm-linux-androideabi-g++ -Wl,-soname,libFinal.so -shaired \ libBase.a libFramework.a libGraphics.a libPlatform.a -o libFinal.so 

    e o erro é

     libPlatform.a(ATexture.o): In function `ATexture': ATexture.cpp:9: undefined reference to `TextureRenderer' ATexture.cpp:9: undefined reference to `TextureRenderer' 

    TextureRenderer está em graphs. Mas libGraphics é antes de libPlatform na linha de command. g ++ searchrá cada biblioteca na linha de command na order em que são fornecidas, cairregando funções paira resolview references externas. Ele irá ler libGraphics uma vez, cairregair as funções que resolvem as references externas e passair paira libPlatform.

    Tente alterair LOCAL_STATIC_LIBRARIES := $(MY_LOCAL_STATIC_LIBRARIES) paira LOCAL_STATIC_LIBRARIES := Platform Graphics Framework Base e veja como você obtém.

    No seu Android.mk , certifique-se de referenciair a biblioteca estática com a chamada adequada:

     LOCAL_STATIC_LIBRARIES := mystaticlibproj 

    Antes de chamada, inclua $(BUILD_SHARED_LIBRARY) .

    Então, no final do file, coloque a chamada paira importair o module de biblioteca estática

     $(call import-module, mystaticlibproj) 

    Se você ainda está com problemas, publique o log detalhado de compilation ( ndk-build V=1 -B ) e seu Android.mk

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.