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

时间:2012-09-26 09:45:52

标签: c++ windows android-ndk createprocess

在Windows平台上使用NDK构建静态库时遇到错误:

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个字符。

我如何解决这个问题?

3 个答案:

答案 0 :(得分:30)

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

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

  

LOCAL_SHORT_COMMANDS

     

当模块的数量非常大时,将此变量设置为“true”      源和/或依赖的静态或共享库。这迫使了      构建系统以使用中间列表文件,并将其与      带有@ $(listfile)语法的库归档器或静态链接器。

     

这在命令行只接受的Windows上很有用      最多8191个字符,对于复杂而言可能太小      项目

     

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

     

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

     

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

希望这有帮助!

答案 1 :(得分:14)


特别感谢@mbrenon!

  

请记住同时设置LOCAL_SHORT_COMMANDS(Android.mk)& APP_SHORT_COMMANDS(Application.mk)如下。

LOCAL_SHORT_COMMANDS := true
APP_SHORT_COMMANDS := true

希望这有帮助! :)

答案 2 :(得分:0)

我遇到了同样的问题,当我做出以下更改时它得到了解决

  1. 右键单击应用程序 - >特性
  2. C / C ++ Build
  3. 改变 构建目录:$ {workspace_loc:/ App} /默认 至 $ {workspace_loc:/应用} /