c++ windows android-ndk createprocess

c++ - Ndk-build: CreateProcess: make(e=87): el parámetro es incorrecto



windows android-ndk (3)

Me sale un error cuando compilo lib estática con NDK en la plataforma de Windows:

process_begin: CreateProcess( "PATH"/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/arm-linux-androideabi-ar.exe, "some other commands" ) failed. make (e=87): The parameter is incorrect. make: *** [obj/local/armeabi-v7a/staticlib.a] Error 87 make: *** Waiting for unfinished jobs....

Todos los archivos fuente se crean correctamente y este error ocurre cuando se componen los archivos de objeto.

No obtengo este error cuando construyo este proyecto en Ubuntu, ocurre solo en Windows.

Supongo que encontré el problema : el segundo parámetro de la función de la API de Win de CreateProcess lpCommandLine tiene una longitud máxima de 32.768 caracteres. Pero en mi caso son más de 32.768 caracteres.

¿Cómo puedo resolver este problema?


Estaba enfrentando el mismo problema y se resolvió cuando hice cambios a continuación

  1. Haga clic derecho en la aplicación -> propiedades
  2. C / C ++ Build
  3. Se modificó el directorio de compilación: $ {workspace_loc: / App} / Predeterminado a $ {workspace_loc: / App} /

Tal vez el indicador LOCAL_SHORT_COMMANDS , que se establecerá en su Android.mk, podría ayudarlo. Está diseñado para superar las limitaciones en el número de caracteres que un comando de Windows puede manejar.

De acuerdo con $ (carpeta NDK) /docs/ANDROID-MK.html:

LOCAL_SHORT_COMMANDS

Establezca esta variable en ''verdadero'' cuando su módulo tenga una gran cantidad de fuentes y / o bibliotecas dependientes estáticas o compartidas. Esto fuerza al sistema de compilación a usar un archivo de lista intermedio y usarlo con el archivador de la biblioteca o el enlazador estático con la sintaxis @ $ (lista de archivos).

Esto puede ser útil en Windows, donde la línea de comandos solo acepta un máximo de 8191 caracteres, que puede ser demasiado pequeño para proyectos complejos.

Esto también afecta la compilación de archivos fuente individuales, colocando casi todos los indicadores del compilador dentro de los archivos de la lista también.

Tenga en cuenta que cualquier otro valor que no sea ''verdadero'' revertirá al comportamiento predeterminado. También puede definir APP_SHORT_COMMANDS en su Application.mk para forzar este comportamiento para todos los módulos en su proyecto.

NOTA: no recomendamos habilitar esta característica de manera predeterminada, ya que hace que la compilación sea más lenta.

¡Espero que esto ayude!



Gracias especiales a @mbrenon!

Recuerde establecer LOCAL_SHORT_COMMANDS (Android.mk) y APP_SHORT_COMMANDS (Application.mk) de la siguiente manera.

LOCAL_SHORT_COMMANDS := true APP_SHORT_COMMANDS := true

Espero que esto ayude ! :)