¿Cómo cruzar la compilación de OpenSSH para ARM?

Estoy tratando de compilar OpenSSH utilizando el Android NDK, pero no.

Mi intento consiste en los siguientes pasos:

  1. compile OpenSSL para Android e instale encabezados / bibliotecas en /home/me/arm

  2. toma OpenSSH 6.2p1 desde aquí

  3. extraer el archivo y ejecutar ./configure :

      ./configure --prefix = / home / me / arm \
             --host = arm-linux-androideabi \
             --with-ssl-dir = / home / me / arm 

    … que resultó en el siguiente error:

      getrrsetbyname.c: 166: 2: error: nombre de tipo desconocido 'HEADER' 
  4. modifique el comando ./configure para incluir:

      ac_cv_search_getrrsetbyname = sí 

    … que fijó el problema uno pero todavía abortado con otro error:

      /usr/include/linux/un.h:17:8: error: redefinición de 'struct sockaddr_un' 
  5. modifique de nuevo el comando ./configure para incluir:

      ac_cv_header_sys_un_h = sí 

    … que me hizo aún más, pero todavía abortado con un error:

      channels.c: En la función 'channel_prepare_select':
     channels.c: 2143: 2: warning: declaración implícita de función 'howmany'
     [Declaración de función-Wimplicit]
     channels.c: 2145: 45: error: 'fd_mask' no declarado (primer uso en esta función) 

Ahora estoy atascado. He abierto el sistema sys/select.h y descubrí que fd_mask no está definido en ninguna parte . También no pude encontrar una opción ./configure para evitar esto. También existe el problema de que howmany() esté indefinido.

¿Qué cambios debo hacer para que el programa compile?


Edit: He conseguido un poco más lejos ahora. He añadido la siguiente línea a ./configure para superar el error "undefined fd_mask ":

  --with-cflags = -Dfd_mask = int 

Entonces recibí el error siguiente:

  error: 'struct passwd' no tiene ningún miembro 'pw_gecos' 

La estructura passwd de Android no tiene un miembro pw_gecos . Este era imposible de corregir sin crear un parche real para el código fuente. El parche está aquí .

Ahora estoy atascado con el siguiente error:

  dns.c: En la función 'dns_result_totext':
 dns.c: 56: 7: error: 'ERRSET_SUCCESS' no declarado (primer uso en esta función)
 dns.c: 56: 7: nota: cada identificador no declarado se informa sólo una vez por cada
   función aparece en
 dns.c: 58: 7: error: 'ERRSET_NOMEMORY' no declarado (el primer uso en esta función)
 ... 

Edit: He hecho algunas modificaciones en el parche anterior que eliminan bastantes de los errores hasta ahora. También he añadido ldns . El comando configure ahora se parece a esto:

  parche -p0 <openssh.patch;
 autoconf;
 ./configure --prefix = / home / me / arm \
             --host = arm-linux-androideabi \
             --with-ldns = / home / me / arm \
             --with-ssl-dir = / home / me / arm \
             ac_cv_header_sys_un_h = sí 

… y aquí está el nuevo parche. Los errores que tengo ahora son:

  loginrec.c: En la función 'construct_utmp':
 loginrec.c: 665: 17: error: 'DEAD_PROCESS' no declarado (primer uso en esta función)
 loginrec.c: 665: 17: nota: cada identificador no declarado se informa sólo una vez para
   cada función que aparece en
 loginrec.c: En el nivel superior:
 loginrec.c: 727: 45: warning: 'struct utmpx' declarada dentro de la lista de parámetros
   [activado de forma predeterminada] 

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.