在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个字符。
我如何解决这个问题?
答案 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)
我遇到了同样的问题,当我做出以下更改时它得到了解决