web-dev-qa-db-ja.com

Ndk-build:CreateProcess:make(e = 87):パラメーターが正しくありません

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文字を超えています。

この問題を解決するにはどうすればよいですか?

28
user1514958

多分LOCAL_SHORT_COMMANDSフラグは、Android.mkで設定するのに役立ちます。これは、Windowsコマンドが処理できる文字数の制限を克服するように設計されています。

$(NDKフォルダー)/docs/Android-MK.htmlによると:

LOCAL_SHORT_COMMANDS

モジュールに非常に多くのソースや依存する静的ライブラリまたは共有ライブラリがある場合は、この変数を「true」に設定します。これにより、ビルドシステムは中間リストファイルを使用し、それをライブラリアーカイバまたは@ $(listfile)構文の静的リンカーで使用するように強制されます。

これは、コマンドラインが最大8191文字しか受け入れないWindowsで役立ちます。これは、複雑なプロジェクトには小さすぎる可能性があります。

これは、個々のソースファイルのコンパイルにも影響を与え、ほぼすべてのコンパイラフラグをリストファイル内に配置します。

'true'以外の値は、デフォルトの動作に戻ることに注意してください。 Application.mkでAPP_SHORT_COMMANDSを定義して、プロジェクト内のすべてのモジュールにこの動作を強制することもできます。

注:ビルドが遅くなるため、この機能をデフォルトで有効にすることはお勧めしません。

お役に立てれば!

30
mbrenon


@ mbrenonに感謝します!

LOCAL_SHORT_COMMANDS(Android.mk)とAPP_SHORT_COMMANDS(Application.mk)の両方を次のように設定することを忘れないでください。

LOCAL_SHORT_COMMANDS := true
APP_SHORT_COMMANDS := true

お役に立てれば ! :)

16
HoseinGhanbari

私は同じ問題に直面していましたが、以下の変更を加えると解決しました

  1. [アプリケーション]-> [プロパティ]を右クリックします
  2. C/C++ビルド
  3. ビルドディレクトリを変更しました:$ {workspace_loc:/ App} /デフォルトは$ {workspace_loc:/ App} /
0
tejasD