Sto ricompilando alcuni eseguibili per Android 5.0 in quanto richiede che gli eseguibili siano PIE
. Sono stato in grado di ricompilare per ARM
con solo l'aggiunta di alcuni argomenti durante la configurazione (con standalone toolchain):GCC: -static e -pie non sono compatibili con x86?
export CFLAGS="-I/softdev/arm-libs/include -fPIE"
export CPPLAGS="$CPPFLAGS -fPIE"
export CXXLAGS="$CXXFLAGS -fPIE"
export LDFLAGS="-L/softdev/arm-libs/lib -static -fPIE -pie"
Nessun errore per ARM:
configure:3406: arm-linux-androideabi-gcc -o conftest -I/softdev/arm-libs/include -fPIE -L/softdev/arm-libs/lib -static -fPIE -pie conftest.c >&5
configure:3410: $? = 0
ma non sono riuscito a fare lo stesso per x86
come sto ottenendo errore:
export CFLAGS="-I/softdev/x86-libs/include -fPIE"
export CPPLAGS="$CPPFLAGS -fPIE"
export CXXLAGS="$CXXFLAGS -fPIE"
export LDFLAGS="-L/softdev/x86-libs/lib -static -fPIE -pie"
errore:
configure:3336: i686-linux-android-gcc -I/softdev/x86-libs/include -fPIE -L/softdev/x86-libs/lib -static -fPIE -pie conftest.c >&5
/softdev/x86-toolchain-gcc4.8/bin/../lib/gcc/i686-linux-android/4.8/../../../../i686-linux-android/bin/ld: fatal error: -pie and -static are incompatible
collect2: error: ld returned 1 exit status
configure:3340: $? = 1
Ho bisogno che gli eseguibili siano collegati staticamente. Cosa c'è che non va e come posso risolverlo?
PS. provato anche utilizzando x86 standalone toolchain da Android NDK r9d e R10C:
./make-standalone-toolchain.sh --toolchain=x86-4.8 --arch=x86 --install-dir=/softdev/x86-toolchain-gcc4.8-r9d --ndk-dir=/softdev/android-ndk-r9d/ --system=darwin-x86_64
Ian, autore di linker "oro", dice: https://sourceware.org/ml/binutils/2012-02/msg00247.html "* On GNU/Linux a PIE è solo una libreria condivisa eseguibile. Come potreste implementare un PIE collegato staticamente? * "E https://sourceware.org/ml/binutils/2012-02/msg00249.html" * Ma collegarvi con - pie realmente genera solo una libreria condivisa e una libreria condivisa richiede ld.so. * ". Probabilmente, su ARM non avrai il vero binario statico, ma binario con l'interprete ld.so. Prova anche x86_64. È possibile collegare le librerie in modo statico, ma utilizzare la libc dinamica (non usare l'opzione '-static'). – osgx
Non sono sicuro di come funzioni internamente, ma almeno posso compilare ARM con entrambi gli argomenti e non posso su X86. Compilato con il file "-static" è 1,7mb e senza di esso (test su x86) è solo 400Kb. Quindi mi fa sentire "-static" funziona anche se si ha "-pie" – 4ntoine
Usa 'file -k' per verificare il tipo binario, e' readelf -l' per controllare la sezione INTERP di ELF (se ne hai uno, non è il vero binario statico), e 'ldd' per controllare le librerie collegate. Penso che il tuo braccio binario possa non essere un vero binario statico. – osgx