0

Android の makefile について少し助けが必要です。

2 つのアプリケーションに共通のモジュールが 1 つあります。共通モジュール用のメイクファイルを作成common.mkし、それを両方のアプリケーションに含める予定でした。

このような:

app1:
=====
main.c
Android.mk
  ...
  ...
  include ../common/common.mk
  LOCAL_MODULE := app1
  ...
  ...

app2:
=====
main.c
Android.mk
  ...
  ...
  include ../common/common.mk
  LOCAL_MODULE := app2
  ...
  ...

common:
=======
common.mk
common.c

を使用してルート ディレクトリからビルドするmake app2と、共通モジュールの一部であるすべての関数に対して複数の定義エラーが発生します。

Androidビルドシステムが適切なターゲット(私の場合はapp2)を検索している間に、common.mkが2回含まれているという結論に達しました。これが問題が発生している理由です。

では、これをどのように制御すればよいでしょうか。Androidの標準的な方法は何ですか?

4

2 に答える 2

1

common.mk では、C ファイルの割り当てに使用している変数は、+= の代わりに := を使用します。

common.mk が呼び出されるたびに、各モジュールの独立した値が割り当てられます

于 2014-07-03T01:12:04.133 に答える
1

正しい方法は、またはターゲットを使用して共通ライブラリ (共有または静的)を構築することです。BUILD_SHARED_LIBRARYBUILD_STATIC_LIBRARY

そして、それらを に追加し、またはを使用してapp1、との間に依存関係を作成します。app2LOCAL_STATIC_LIBRARIESLOCAL_SHARED_LIBRARIESapp1app2common

詳細については、Android.mk ファイルの構文仕様を確認してください。

BUILD_SHARED_LIBRARY

LOCAL_XXX 変数で指定したモジュールに関するすべての情報を収集し、リストしたソースからターゲット共有ライブラリをビルドする方法を決定するビルド スクリプトを指します。このファイルを含める前に、少なくとも LOCAL_MODULE と LOCAL_SRC_FILES を定義しておく必要があることに注意してください。

使用例:

  include $(BUILD_SHARED_LIBRARY)

これにより、lib$(LOCAL_MODULE).so という名前のファイルが生成されることに注意してください。

BUILD_STATIC_LIBRARY

代わりにターゲットの静的ライブラリを構築するために使用される BUILD_SHARED_LIBRARY のバリアント。静的ライブラリはプロジェクト/パッケージにコピーされませんが、共有ライブラリの構築に使用できます (後述の LOCAL_STATIC_LIBRARIES および LOCAL_WHOLE_STATIC_LIBRARIES を参照)。

使用例:

  include $(BUILD_STATIC_LIBRARY)

これにより、lib$(LOCAL_MODULE).a という名前のファイルが生成されることに注意してください。

LOCAL_STATIC_LIBRARIES

このモジュールにリンクする必要がある静的ライブラリ モジュール (BUILD_STATIC_LIBRARY でビルド) のリスト。これは、共有ライブラリ モジュールでのみ意味があります。

LOCAL_SHARED_LIBRARIES

このモジュールが実行時に依存する共有ライブラリ モジュールのリスト。これは、リンク時に、生成されたファイルに対応する情報を埋め込むために必要です。

于 2014-07-02T13:16:30.377 に答える