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 WinAPI関数の2番目のパラメーター lpCommandLine 最大長さ 32,768 文字。しかし、私の場合は32,768文字を超えています。
この問題を解決するにはどうすればよいですか?
多分LOCAL_SHORT_COMMANDS
フラグは、Android.mkで設定するのに役立ちます。これは、Windowsコマンドが処理できる文字数の制限を克服するように設計されています。
$(NDKフォルダー)/docs/Android-MK.htmlによると:
LOCAL_SHORT_COMMANDS
モジュールに非常に多くのソースや依存する静的ライブラリまたは共有ライブラリがある場合は、この変数を「true」に設定します。これにより、ビルドシステムは中間リストファイルを使用し、それをライブラリアーカイバまたは@ $(listfile)構文の静的リンカーで使用するように強制されます。
これは、コマンドラインが最大8191文字しか受け入れないWindowsで役立ちます。これは、複雑なプロジェクトには小さすぎる可能性があります。
これは、個々のソースファイルのコンパイルにも影響を与え、ほぼすべてのコンパイラフラグをリストファイル内に配置します。
'true'以外の値は、デフォルトの動作に戻ることに注意してください。 Application.mkでAPP_SHORT_COMMANDSを定義して、プロジェクト内のすべてのモジュールにこの動作を強制することもできます。
注:ビルドが遅くなるため、この機能をデフォルトで有効にすることはお勧めしません。
お役に立てれば!
@ mbrenonに感謝します!
LOCAL_SHORT_COMMANDS(Android.mk)とAPP_SHORT_COMMANDS(Application.mk)の両方を次のように設定することを忘れないでください。
LOCAL_SHORT_COMMANDS := true
APP_SHORT_COMMANDS := true
お役に立てれば ! :)
私は同じ問題に直面していましたが、以下の変更を加えると解決しました