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

use*_*958 27 c++ windows createprocess android-ndk

在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....
Run Code Online (Sandbox Code Playgroud)

所有源文件都已成功构建,并且在撰写目标文件时会发生此错误.

在Ubuntu中构建此项目时,我不会收到此错误,它只发生在Windows上.

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

我怎么能解决这个问题?

mbr*_*non 30

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

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

LOCAL_SHORT_COMMANDS

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

这在Windows上很有用,其中命令行最多只接受8191个字符,这对于复杂项目来说可能太小.

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

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

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

希望这可以帮助!


Hos*_*ari 16


特别感谢@mbrenon!

请记住如下设置LOCAL_SHORT_COMMANDS(Android.mk)和APP_SHORT_COMMANDS(Application.mk).

LOCAL_SHORT_COMMANDS := true
APP_SHORT_COMMANDS := true
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 !:)