Cross Compiling Libevent para Android

Estoy atascado tratando de compilar de forma cruzada libevent para Android y me gustaría saber qué estoy haciendo mal y obtener ayuda.

La versión que estoy tratando de construir es libevent-2.0.19-stable

Comencé siguiendo los pasos descritos enhttp://warpedtimes.wordpress.com/2010/02/03/building-open-source-libraries-with-android-ndk/ y¿Cómo reescribir el Makefile en android.mk?

El dispositivo de destino es un Samsung Galaxy S2 que ejecuta cyanogenMod 7

Después de varios intentos, lo mejor que hice fue ejecutar los siguientes pasos:

1) Install android NDK and download libevent source code

2) Android NDK downloaded and running in ~/android-ndk/android-ndk-r8b

3) Ejecutar:

export ANDROID_ROOT=~/android-ndk/android-ndk-r8b

export    PATH=$PATH:$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/

Necesita exportar el ABI para su dispositivo. armeabi-v7a es para dispositivos con ARMv7 o superior, cualquier otro dispositivo usa armeabi.

4) Ejecute ./configure con los parámetros apropiados:

./configure \
--host=arm-linux-androideabi \
CC=arm-linux-androideabi-gcc \
LD=arm-linux-androideabi-ld \
CPPFLAGS="-I$ANDROID_ROOT/platforms/android-8/arch-arm/usr/include/" \
CFLAGS="-nostdlib" \
LDFLAGS="-Wl,-rpath-link=$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/ -L$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/" \
LIBS="-lc"

Mientras tanto, hubo una advertencia:

configure: WARNING: if you wanted to set the --build type, don't use --host.
If a cross compiler is detected then cross compile mode will be used

(Supongo que está bien)

Como no reconocí arm-linux-androideabi como host, obtuve un nuevo config.guess y config.sub dehttp://git.savannah.gnu.org/gitweb/?p=config.git;a=tree (indicado en el hilo anterior en Desbordamiento de pila)

En este punto, cuando se genera el código fuente que ejecuta "make", aún se bloquea:

/home/narseo/android-ndk/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: crtbegin_so.o: No such file: No such file or directory
collect2: ld returned 1 exit status
make[2]: *** [libevent.la] Error 1
make[2]: se sale del directorio «/home/narseo/libevent-source/libevent-2.0.19-stable»
make[1]: *** [all-recursive] Error 1
make[1]: se sale del directorio «/home/narseo/libevent-source/libevent-2.0.19-stable»
make: *** [all] Error 2

Sin embargo, el archivo parece estar allí:

~/android-ndk$ ls $ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib
crtbegin_dynamic.o  libc.a           libjnigraphics.so  libstdc++.so
crtbegin_so.o       libc.so          liblog.so          libthread_db.so
crtbegin_static.o   libdl.so         libm.a             libz.so
crtend_android.o    libGLESv1_CM.so  libm.so
crtend_so.o         libGLESv2.so     libstdc++.a

¿Hay algo que esté haciendo mal al ejecutar ./configure? Algo más que no entendía, incluso mirando la documentación de NDK de Android era si era obligatorio crear un Android.mk o si Makefile era suficiente

Cualquier ayuda será muy bienvenida!

Aclamaciones

N

Nota

Así es como logré resolverlo al final:

RUTA INICIAL:

export ANDROID_ROOT=~/android-ndk/android-ndk-r8b
export PATH=$PATH:$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/
export PATH=$PATH:$ANDROID_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/include/

Los errores parecen ocurrir en la fase de vinculación, ya que no puede encontrar crtend_so.o y crtbegin_so.o. SiguiendoFalta crtbegin_so.o para la cadena de herramientas de Android (compilación personalizada), les agregamos un enlace sym en la carpeta de origen

cd source && ln -s $ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/crtbegin_so.o 
ln -s $ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/crtend_so.o 

El comando ./configure:

./configure \
--host=arm-linux-androideabi \
CC=arm-linux-androideabi-gcc \
LD=arm-linux-androideabi-ld \
CPPFLAGS="-I$ANDROID_ROOT/platforms/android-8/arch-arm/usr/include/" \
CFLAGS="-nostdlib" \
LDFLAGS="-Wl,-rpath-link=$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/ -L$ANDROID_ROOT/platforms/android-8/arch-arm/usr/lib/" \
LIBS="-lc"

Si falla, ya que no reconoce el sistema androideabi, intente obtener versiones más recientes de config.sub y config.guess

Solía ​​estrellarse en la fase de enlace. La inclusión de -lgcc en el CFLAGS resolvió el problema.

Respuestas a la pregunta(3)

Su respuesta a la pregunta