Подтвердить что ты не робот

Ndk-build: CreateProcess: make (e = 87): параметр неверен

Я получаю сообщение об ошибке при сборке static lib с 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 имеет максимальную длину 32,768. Но в моем случае это более 32 768 символов.

Как я могу решить эту проблему?

4b9b3361

Ответ 1

Возможно, флаг LOCAL_SHORT_COMMANDS, который будет установлен в вашем Android.mk, может вам помочь. Он предназначен для преодоления ограничений на количество символов, которые может обрабатывать команда Windows.

В соответствии с $(папкой NDK)/docs/ANDROID-MK.html:

LOCAL_SHORT_COMMANDS

Установите для этой переменной значение "true", когда ваш модуль имеет очень большое количество    источников и/или зависимых статических или разделяемых библиотек. Это заставляет    построить систему для использования файла промежуточного списка и использовать его с помощью    библиотечный архиватор или статический компоновщик с синтаксисом @$(listfile).

Это может быть полезно в Windows, где только командная строка принимает    максимум 8191 символ, который может быть слишком мал для сложных    проектов.

Это также влияет на компиляцию отдельных исходных файлов, размещение    почти все флаги компилятора внутри файлов списка тоже.

Обратите внимание, что любое другое значение, чем "true", вернется к умолчанию    поведение. Вы также можете определить APP_SHORT_COMMANDS в своем    Application.mk, чтобы заставить это поведение для всех модулей в вашем    проект.

ПРИМЕЧАНИЕ. Мы не рекомендуем включать эту функцию по умолчанию, так как она          делает сборку медленнее.

Надеюсь, это поможет!

Ответ 2


Особая благодарность @mbrenon!

Не забудьте установить как LOCAL_SHORT_COMMANDS (Android.mk), так и APP_SHORT_COMMANDS (Application.mk) следующим образом.

LOCAL_SHORT_COMMANDS := true
APP_SHORT_COMMANDS := true

Надеюсь, это поможет!:)

Ответ 3

У меня возникла такая же проблема, и она была решена, когда я сделал изменения ниже

  • Щелкните правой кнопкой мыши Application → properties
  • C/С++ Build
  • Изменено Каталог сборки: ${workspace_loc:/App}/Default в $ {Workspace_loc:/App}/