Estoy tratando de compilar Linux PAM para Android de la siguiente manera
`#!/bin/sh # Linux-PAM/build.sh INSTALL_DIR="`pwd`/out" export PATH="android/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin:$PATH" export CROSS_COMPILER="$PATH:android/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin" export SYS_ROOT="android/prebuilts/ndk/current/platforms/android-9/arch-arm" export CC="arm-linux-androideabi-gcc --sysroot=$SYS_ROOT" export LD="arm-linux-androideabi-ld" export AR="arm-linux-androideabi-ar" export RANLIB="arm-linux-androideabi-ranlib" export STRIP="arm-linux-androideabi-strip" mkdir -p $INSTALL_DIR ./configure --host=arm-eabi --build=x86_64 --enable-shared --prefix=$INSTALL_DIR LIBS="-lc -lgcc" make make install`La salida proporciona bibliotecas construidas estáticamente. Quiero bibliotecas compartidas. Si compilo para Linux, crea una biblioteca compartida de forma predeterminada. Pero para Android se construye estáticamente. El archivo config.log tiene lo siguiente
configure:3581: arm-linux-androideabi-gcc --sysroot=android/prebuilts/ndk/current/platforms/android-9/arch-arm -v >&5 Using built-in specs. COLLECT_GCC=arm-linux-androideabi-gcc COLLECT_LTO_WRAPPER=android/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.6/bin/../libexec/gcc/arm-linux-androideabi/4.6.x-google/lto-wrapper Target: arm-linux-androideabi Configured with: /tmp/android-8532/src/build/../gcc/gcc-4.6/configure --prefix=/usr/local --target=arm-linux-androideabi --host=x86_64-linux-gnu --build=x86_64-linux-gnu --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --with-gmp=/tmp/android-8532/obj/temp-install --with-mpfr=/tmp/android-8532/obj/temp-install --with-mpc=/tmp/android-8532/obj/temp-install --without-ppl --without-cloog --disable-libssp --enable-threads --disable-nls --disable-libmudflap --disable-libgomp --disable-libstdc__-v3 --disable-sjlj-exceptions --disable-shared --disable-tls --disable-libitm --with-float=soft --with-fpu=vfp --with-arch=armv5te --enable-target-optspace --with-gcc-version=4.6 --with-binutils-version=2.21 --with-gmp-version=4.2.4 --with-mpfr-version=2.4.1 --with-gdb-version=7.3.x --with-arch=armv5te --with-sysroot=/tmp/android-8532/install/sysroot --with-prefix=/tmp/android-8532/install --with-gold-version=2.21 --enable-gold --program-transform-name='s&^&arm-linux-androideabi-&' --enable-gold=default .... configure:10632: checking if libtool supports shared libraries configure:10634: result: no configure:10637: checking whether to build shared libraries configure:10658: result: no¿Qué está yendo mal?
He tenido problemas similares al compilar de forma cruzada para Android desde la línea de comandos. iOS también es divertido. Ver ¿Cómo configurar para Android? en la lista de correo de Autoconf.
Creo que host es incorrecto. Tratar:
./configure --build=`./config.guess` --host=arm ...o
./configure --build=`./config.guess` --host=arm-linux-androideabi ... Si no es así, ¿puede publicar los resultados completos de config.log (completamente relacionados con las pruebas de objetos compartidos, no el archivo completo).
Lo siento, no puedo ayudarte más. Estoy probando la compilación cruzada de Linux-PAM-1.1.8 en mi MacBook (está configurado para Android dev), pero este es mi resultado:
In file included from pam_modutil_private.h:14:0, from pam_audit.c:12: ./include/security/pam_modutil.h:53:20: fatal error: shadow.h: No such file or directory compilation terminated. make[2]: *** [pam_audit.lo] Error 1 make[1]: *** [all-recursive] Error 1 make: *** [all] Error 2 $ pwd /Users/jwalton/Linux-PAM-1.1.8 $ find . -iname shadow.h $Noté esto en la cadena de registro grande y larga:
Target: arm-linux-androideabi Configured with: /tmp/android-8532/src/build/../gcc/gcc-4.6/configure ... --disable-shared ...Por lo tanto, las bibliotecas compartidas están deshabilitadas, lo que significa que no las construirá.
Hice un pequeño progreso y descubrí que el indicador can_build_shared está desactivado porque no puede encontrar un enlazador dinámico para el tipo de host = eabi
configure:9299: comprobación de las características del enlazador dinámico
En el script de configuración, la verificación es la siguiente
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os inluego hay una lista de host_os como darwin, aix... pero no hay caso swith para "host_os=eabi"
Esta es la causa raíz. Buscando la solución..