2016-03-15 14 views
7

UPDATE 19 Marzo 2016: superpoteri ha rilasciato nuovi binari che funzionano correttamente con NDK r11NDK-build non riesce a costruire libreria audio superpoteri dopo l'aggiornamento recente NDK

Sto cercando di costruire superpoteri progetto di esempio CrossExample biblioteca in Android Studio. Fino recente NDK aggiornamento ha funzionato come fascino, ma ora l'esecuzione di NDK-build dà un errore:

Error:error: undefined reference to '__page_size' 

ho cercato edificio con diversi toolchain, la rimozione/aggiunta di diverse bandiere di compilazione senza fortuna finora.

In un progetto diverso che utilizza SDK Superpowered e praticamente la stessa configurazione, ottengo altri dettagli di errore. Parte di log dei messaggi in uscita:

/android/ndk/platforms/android-9/arch-x86/usr/include/unistd.h:173: error: undefined reference to '__page_size' 
/android/ndk/platforms/android-9/arch-x86/usr/include/unistd.h:173: error: undefined reference to '__page_size' 
clang++: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [/Users/user_name/StudioProjects/project_name/app/src/main/jniSuperpowered/obj/local/x86/libNativeLibName.so] Error 1 
make: *** Waiting for unfinished jobs.... 
/Volumes/iMect/iphone/SuperpoweredSource/decoder/SuperpoweredDecoder.cpp:120: error: undefined reference to '__page_size' 
/Volumes/iMect/iphone/SuperpoweredSource/decoder/hlsreader.cpp:582: error: undefined reference to '__page_size' 
clang++: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [/Users/user_name/StudioProjects/project_name/app/src/main/jniSuperpowered/obj/local/armeabi-v7a/libNightcorizerSuperpowered.so] Error 1 
FAILURE: Build failed with an exception. 

Ciò che non guarda a destra è undefined reference to __page_size in unistd.h. Tuttavia ho un'idea molto piccola di ulteriore risoluzione dei problemi.

Grazie in anticipo per qualsiasi aiuto/suggerimenti!

+0

Quale versione dell'NDK stai usando prima dell'aggiornamento? Hai aggiornato a r11? –

+0

Stavo usando la versione in bundle con Android Studio – Sam

risposta

11

Le modifiche apportate in questo NDK commit sembrano spiegare il problema che si sta verificando. In base alla descrizione dell'impegno, __page_size è stato sostituito con PAGE_SIZE per i livelli di API Android 12 e inferiori. Poiché stai utilizzando il livello API 9 e il codice che fa riferimento direttamente allo __page_size, stai vedendo un effetto da questa modifica.

Tuttavia, sembra che la firma del metodo per int getpagesize() non è cambiato tra versioni NDK o attraverso i livelli di API, così si dovrebbe essere in grado di risolvere il problema sostituendo l'utilizzo di __page_size con getpagesize() nelle seguenti posizioni:

SuperpoweredSource/decoder/SuperpoweredDecoder.cpp: 120 SuperpoweredSource/decoder/hlsreader.cpp: 582

Aggiornamento: per risolvere il problema senza modificare il codice sorgente di superpoteri, avresti bisogno di definire il simbolo __page_size. Per fare questo, si potrebbe costruire una piccola biblioteca manichino che contiene solo

#include <unistd.h> 
extern unsigned int __page_size = getpagesize(); 

Poi, aggiungere un modulo per questa libreria al Android.mk (o il vostro build.gradle se si sta utilizzando il nuovo sistema sperimentale) e fare in modo che il modulo per Superpot dipende dal modulo fittizio.

Oppure, è possibile presentare una segnalazione di errore con Superpotenza.

+0

Grazie per la spiegazione. Ho visto le fonti di unistd.h e sì, sembra essere una cosa corretta da fare. Tuttavia non ho il controllo sui codici sorgente della libreria, quindi ho ancora bisogno di una soluzione alternativa – Sam

4

Quindi, come soluzione alternativa per la situazione, ho ripristinato NDK su r10e che ha funzionato. Lo utilizzerà fino a quando la libreria Superpowered non avrà una correzione. Grazie mille a @bullsy

+1

Questo è ragionevole. Spero che venga risolto presto :) –

Problemi correlati