Я получаю сообщение об ошибке при сборке статической библиотеки с помощью NDK на платформе 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....
Все исходные файлы создаются успешно, и эта ошибка возникает при создании объектных файлов.
Я не получаю эту ошибку при сборке этого проекта в Ubuntu, это происходит только в Windows.
Я полагаю, я нашел вопрос: второй параметр CreateProcess Win API функция lpCommandLine имеет максимальную длину 32768 персонажи. Но в моем случае это более 32 768 символов.
Как я могу решить эту проблему?
Может быть LOCAL_SHORT_COMMANDS
флаг, который будет установлен в вашем Android.mk, может помочь вам. Он предназначен для преодоления ограничений на количество символов, которое может обрабатывать команда Windows.
Согласно $ (папка NDK) /docs/ANDROID-MK.html:
LOCAL_SHORT_COMMANDS
Установите для этой переменной значение true, если в вашем модуле очень много
источники и / или зависимые статические или общие библиотеки. Это заставляет
построить систему для использования файла промежуточного списка, и использовать его с
архиватор библиотеки или статический компоновщик с синтаксисом @ $ (listfile).Это может быть полезно в Windows, где командная строка принимает только
максимум 8191 символов, что может быть слишком мало для сложных
проекты.Это также влияет на компиляцию отдельных исходных файлов, помещая
почти все флаги компилятора внутри файлов списка тоже.Обратите внимание, что любое другое значение, кроме «true», вернется к значению по умолчанию
поведение. Вы также можете определить APP_SHORT_COMMANDS в вашем
Application.mk, чтобы заставить это поведение для всех модулей в вашем
проект.ПРИМЕЧАНИЕ. Мы не рекомендуем включать эту функцию по умолчанию, так как
делает сборку медленнее
Надеюсь это поможет!
Особая благодарность @mbrenon!
Не забудьте установить оба из LOCAL_SHORT_COMMANDS (Android.mk) & APP_SHORT_COMMANDS (Application.mk) следующим образом.
LOCAL_SHORT_COMMANDS := true
APP_SHORT_COMMANDS := true
Надеюсь это поможет ! 🙂
Я столкнулся с той же проблемой, и она была решена, когда я сделал следующие изменения