2

3 つのプロジェクトを持つ MVS ソリューションがあるとします。そのうちの 2 つはライブラリで、3 つ目は exe です。A.lib、B.lib、C.exe。A は B に依存し、C は A と B を含みます。私たちは皆満足しています。C に両方を含めると、リンカは B から A が必要とするすべてのものを見つけます。

私はこれをAndroid ndk(ndk-buildを使用)で複製しようとしているので、最も簡単な方法は、2つの共有ライブラリ(A.soとB.so)を作成し、それらを3番目のC.soに含めて、次のようにパックすることです。 C.apk のネイティブ アクティビティ。

B.so を makefile に含めない限り、どうやら A.so はビルドされません。だから、代わりに

A.lib---> C.exe
B.lib--/

Windows の場合と同様に、次のものが必要です。

B.so --> A.so --> C.so

最終的な apk にライブラリを追加するときにリンカー シンボルを解決するのではなく、ライブラリごとに解決する必要があるため、ライブラリが追加されるにつれて、これはかなり混乱します。この動作は、次を使用してバイパスできます。

LOCAL_ALLOW_UNDEFINED_SYMBOLS=true

ライブラリの Android.mk にありますが、それらをアプリケーションにロードするときに

static 
{
 System.loadLibrary("B");
 System.loadLibrary("A");
}

Aがいくつかのシンボル(Bで定義されている)を見つけることができないと言って、実行時に失敗します。

個々のライブラリをビルドして未定義のシンボルを許可し、それらをすべて最終プロジェクトに含めるときにそれらが確実に見つかるようにする「正しい」方法はありますか?

4

1 に答える 1

0

それらを静的ライブラリ (.a) としてコンパイルし、include $(PREBUILT_STATIC_LIBRARY)メソッドを使用してプロジェクトに含め、LOCAL_WHOLE_STATIC_LIBRARIES := BA で依存関係の順にリストすると、

于 2013-11-25T23:01:30.960 に答える