33

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の 2 番目のパラメーターの最大長は32,768文字です。しかし、私の場合は 32,768 文字を超えています。

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

4

3 に答える 3

36

LOCAL_SHORT_COMMANDSAndroid.mk に設定するフラグが役立つかもしれません。Windows コマンドが処理できる文字数の制限を克服するように設計されています。

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

LOCAL_SHORT_COMMANDS

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

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

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

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

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

お役に立てれば!

于 2012-10-04T09:35:48.223 に答える
1

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

  1. アプリケーションを右クリック -> プロパティ
  2. C/C++ ビルド
  3. ビルド ディレクトリを変更: ${workspace_loc:/App}/Default を ${workspace_loc:/App}/ に変更
于 2015-10-19T07:44:35.637 に答える