在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
希望这可以帮助 ! 🙂
我面临同样的问题,当我做出下面的改变时,问题就解决了