Riferimento non definito alla function in libreria statica con NDK

Quindi sto tentando di utilizzare libopus sul mio codice nativo per un'applicazione Android. Il mio file Android.mk ha il seguente aspetto:

PLATFORM_PREFIX := /opt/android-ext/ LOCAL_PATH := $(PLATFORM_PREFIX)/lib include $(CLEAR_VARS) LOCAL_MODULE := libopus LOCAL_SRC_FILES := libopus.a include $(PREBUILT_STATIC_LIBRARY) # I have to redeclare LOCAL_PATH because the library is in /opt/android-ext/ # and my project is somewhere else. Not very elegant. LOCAL_PATH := /home/sergio/workspace/Project/jni include $(CLEAR_VARS) LOCAL_MODULE := opusUtilsNative LOCAL_SRC_FILES := opusUtilsNative.c LOCAL_C_INCLUDES += $(PLATFORM_PREFIX)/include LOCAL_STATIC_LIBRARIES := android_native_app_glue libopus include $(BUILD_SHARED_LIBRARY) 

E il mio codice in opusUtilsNative.c è simile a questo:

  • Errore di rendering del cassetto di navigazione nell'editor di layout ADT
  • Quando android spara ACTION_BATTERY_LOW
  • Android: come triggersre il mio button indietro se EditText non è vuoto?
  • Come faccio ad utilizzare il client HTTP semplice in Android?
  • Come installare un file APK su un telefono Android?
  • Come rimuovere tutti i commenti dal file specifico in Android Studio?
  •  #include "opusUtilsNative.h" #include <opus/opus.h> #include <opus/opus_types.h> JNIEXPORT jbyteArray JNICALL Java_Project_OpusUtils_encode (JNIEnv * je, jclass jc, jbyteArray data){ int rc; opus_int16 * testOutBuffer; unsigned char* opusBuffer; OpusDecoder *dec; dec = opus_decoder_create(48000, 2, &rc); return data; } 

    E quando cerco di costruirlo, funziona bene solo se rimuovo la row che utilizza la function "opus_decoder_create" . Altrimenti ottengo questo:

     error: undefined reference to 'opus_decoder_create' 

    Posso vedere che opus_decoder_create è chiaramente definito su opus.h, che è chiaramente incluso poiché se escludo quella row, avrò un errore per quanto riguarda le dichiarazioni opus_int16 e OpusDecoder. Come vengono incluse alcune definizioni e alcune non sono?

    Qualsiasi aiuto sarà molto apprezzato.

  • gli androidi i bordi che sbiadiscono non funzionano
  • Perché Handler :: postDelay rende l'UI congelato
  • Anteprima della macchina fotografica con un'image trasparente sopra
  • Transizioni di elementi condivisi tra visualizzazioni (non attività o frammenti)
  • lo sviluppo di iOS e Android su Windows
  • PhoneGap: C'è un modo per arrestare la tastiera da ridimensionare la visualizzazione?
  • 3 Solutions collect form web for “Riferimento non definito alla function in libreria statica con NDK”

    Questo era difficile. Dopo aver scavato per un po ', mi sono reso conto di non aver compilato correttamente la libreria dell'opus e non ho poi avuto un binario ARM dopo tutto.

    Un buon modo per verificare se la tua libreria è stata correttamente compilata:

     cd /opt/android-ext/lib #Or wherever the .a file is ar x libopus.a file tables_LTP.o #Or any of the .o files generated by ar x 

    L'output dovrebbe essere simile a questo:

     tables_LTP.o: ELF 32-bit LSB relocatable, ARM, version 1 (SYSV), not stripped 

    Altrimenti, potrebbe essere necessario controllare due volte il process di compilazione incrociata.

    È errore dal linker, non dal compilatore. Hai dimenticato di aggiungere un riferimento alle librerie corrispondenti al tuo file Android.mk , fai così:

     LOCAL_LDLIBS += -lopus 

    Ho dimenticato di integrare una libreria di chiavi

    LOCAL_LDLIBS: = -lGLESv2

    Questo ha risolto il mio problema.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.