Ndk-build:CreateProcess:make(e = 87):参数不正确

在Windows平台上使用NDK构build静态库时出现错误:

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.... 

所有源文件都可以成功构build,并且在编写目标文件时发生此错误。

在Ubuntu中构build这个项目时,我不会得到这个错误,它只发生在Windows上。

我想我发现了这个问题 : CreateProcess Win API函数的第二个参数lpCommandLine最大长度为32,768个字符。 但在我的情况下,它是超过32,768个字符。

我如何解决这个问题?

也许在Android.mk中设置的LOCAL_SHORT_COMMANDS标志可以帮助你。 它旨在克服Windows命令可以处理的字符数的限制。

根据$(NDK文件夹)/docs/ANDROID-MK.html:

LOCAL_SHORT_COMMANDS

当您的模块具有非常多的源和/或相关的静态或共享库时,将此变量设置为“true”。 这将强制构建系统使用中间列表文件,并将其与库归档程序或静态链接程序与@ $(listfile)语法一起使用。

这在Windows上非常有用,命令行最多只能接受8191个字符,对于复杂的项目来说这个字符可能太小了。

这也会影响个别源文件的编译,几乎所有的编译器标志都放在列表文件中。

请注意,除“真”以外的任何其他值都将恢复为默认行为。 您也可以在您的Application.mk中定义APP_SHORT_COMMANDS,以强制执行项目中所有模块的此行为。

注意:我们不建议在默认情况下启用此功能,因为它会使构建变慢。

希望这可以帮助!

特别感谢@mbrenon!

请记住设置LOCAL_SHORT_COMMANDS(Android.mk)&APP_SHORT_COMMANDS(Application.mk),如下所示。

 LOCAL_SHORT_COMMANDS := true APP_SHORT_COMMANDS := true 

希望这可以帮助 ! 🙂

我面临同样的问题,当我做出下面的改变时,问题就解决了

  1. 右键单击应用程序 – >属性
  2. C / C ++构建
  3. 更改生成目录:$ {workspace_loc:/ App} /默认为$ {workspace_loc:/ App} /