La vera storia breve è, se si stanno costruendo librerie condivise (al contrario di file eseguibili), non è necessario fare nulla. Le librerie che funzionano su versioni precedenti di Android continueranno a funzionare bene - nulla è cambiato in Android 5.0 rispetto a questo.
La storia quasi altrettanto breve, se si stanno costruendo eseguibili con Android.mk e con targeting per Android 4.1+, i flag necessari devono essere già aggiunti automaticamente.
L'intera storia: Il motivo per cui non si riesce quando si tenta di aggiungere il flag -pie
a LDFLAGS per le librerie, è che questo flag è solo per gli eseguibili, non per le librerie. Quando si creano librerie condivise, il flag del compilatore -fPIC
(durante la creazione di singoli file oggetto, se si esegue manualmente il compilatore - Android.mk e ndk-build si occupano automaticamente di questo) potrebbe essere necessario su alcune architetture, ma si noterà che è necessario perché il linker rifiuterà di produrre una libreria condivisa se è necessaria e non l'hai impostata. Quindi, se hai un problema lo saprai già perché non riuscirà a costruire - se lo hai realizzato con successo non hai alcun problema.
Analogamente durante la creazione di file eseguibili, è necessario aggiungere -fPIE
durante la creazione dei file oggetto e -fPIE -pie
quando si collegano i file eseguibili. Android.mk e ndk-build si prenderanno cura di questo automaticamente, se il tuo APP_PLATFORM è Android-16 (Android 4.1) o superiore. Ecco il grande trucco: gli eseguibili creati con -pie
funzionano solo su Android-16 o versioni successive, mentre gli eseguibili creati senza -pie
non funzionano su Android-21 (Android 5.0). Quindi, qui c'è un periodo di prova, da Android 4.1 a 4.4 verrà eseguito qualsiasi eseguibile, mentre occorrerà esplicitamente una versione senza -pie
per le versioni precedenti e un'altra versione con -pie
per quelle più recenti.
Se è necessario indirizzare le versioni Android precedenti alla 4.1, vedere https://stackoverflow.com/a/26422855/3115956 per una spiegazione su come creare facilmente due versioni del file eseguibile.
Se possibile, mostrare un richiamo di esempio del compilatore e l'invocazione del linker. – jww