プリコンパイルされたライブラリPREBUILTライブラリを使用して

プリコンパイルされたライブラリを使用します

NDKは、使用プリコンパイルライブラリ(静的および共有ライブラリの両方をサポートしています)をサポートしています。この関数は、主に2つのユースケースがあります。

  • (ソースコードを配布していない)サードパーティの開発者に独自のライブラリNDKを配布します。
  • コンパイル速度を向上させるために、プリコンパイルされたバージョンの独自のライブラリを使用してください。

このページには、コンパイル済みのライブラリを使用する方法について説明します。

声明プリコンパイルライブラリ

各ステートメントのためのコンパイル済みのライブラリは、あなたは別のモジュールとして独自のものを使用する必要があります。これを行うには、次の手順を実行します。

  1. モジュールの名前を指定します。この名前は必ずしも同じ名前プリコンパイルライブラリ自体ではありません。
  2. モジュールでは  Android.mk 、ファイル、コンパイル済みのライブラリへのパスがあなたに割り当てられた提供します  LOCAL_SRC_FILES指定  LOCAL_PATH 変数パスの相対値を。

    :ABIに対応するターゲットとライブラリのコンパイル済みのバージョンを選択してください。ライブラリはABIをサポートしていることを確認する方法の詳細については、を参照してくださいABIプリコンパイルされたライブラリを選択してください

  3. あなたによると(共有ライブラリを使用している.so()または静的ライブラリ.aの追加、)  PREBUILT_SHARED_LIBRARY または  PREBUILT_STATIC_LIBRARY

次の例では、小さなライブラリを事前にコンパイルすることを前提とし  libfoo.so 、その説明  Android.mk と同じディレクトリにファイルを。

    LOCAL_PATH:= $は(私の-DIRを呼び出す)

    $(CLEAR_VARS)が含ま
    LOCAL_MODULE:= FOO-構築済み
    LOCAL_SRC_FILESを:= libfoo.so 
    $(PREBUILT_SHARED_LIBRARY)が含ま
    
 

この例では、同じモジュール名とプリコンパイルされたライブラリの名前。

あなたは置かプリコンパイルされたコピーの共有ライブラリにコンパイルされる  $PROJECT/obj/local には、そのコピーは、別の抽出デバッグ情報が配置されるだろう  $PROJECT/libs/<abi> に。ここでは$PROJECT 、プロジェクトのルートディレクトリです。

他のモジュールプリコンパイルされたライブラリからの参照

他のモジュールからの参照は、これらに関連したモジュールで、ライブラリをプリコンパイル  Android.mk ファイル、プリコンパイルされたライブラリの名前は、指定  LOCAL_STATIC_LIBRARIES または  LOCAL_SHARED_LIBRARIES 変数。

例えば、使用  libfoo.so モジュールは、次の手順に類似していてもよいです。

    $(CLEAR_VARS)が含ま
    LOCAL_MODULEを:= FOO-ユーザー
    LOCAL_SRC_FILES:= FOO-user.c 
    LOCAL_SHARED_LIBRARIES:= FOO-ビルド済みの
    $(BUILD_SHARED_LIBRARY)が含ま
    
 

ここではLOCAL_MODULE 、モジュールプリコンパイルライブラリの参照名で、LOCAL_SHARED_LIBRARIES プリコンパイルされたライブラリ名そのもの。

輸出プリコンパイルヘッダライブラリー

foo-user.c 典型的に配置されているコードは、ヘッダファイル(例えば、依存する  foo.hで特定文)、およびヘッダファイルがコンパイル済みライブラリを使用して割り当てられます。例えば、foo-user.c 次のようなコードの行があってもよいです。

    書式#include <foo.hという> 
   
 

コンパイルこの場合、  foo-user モジュールを、あなたは、ヘッダーとそのパスコンパイラが含まれるようにポイントを提供する必要があります。これを行うための簡単な方法は、プリコンパイルされたモジュールの定義で書き出したコンテンツを使用することです。例えば、限りヘッダは以下のように  foo.h 事前にコンパイルモジュールに関連付けられて配置されている  include ディレクトリは、以下のように宣言することができます。

    $(CLEAR_VARS)が含ま
    = FOO-構築済み:LOCAL_MODULE 
    LOCAL_SRC_FILES:= libfoo.so 
    LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATH)/含んで
    $(PREBUILT_SHARED_LIBRARY)が含ま
    
 

ここだ  LOCAL_EXPORT_C_INCLUDES コンパイラシステムの定義は、プリコンパイルされたライブラリにその輸出ポイントを確保する  include モジュールのディレクトリパスには、追加へのパスに依存し  LOCAL_C_INCLUDES た値。

このシステムは、コンパイラが必要なヘッダを検索することができ。

デバッグプリコンパイルライブラリ

私たちは、あなたがデバッグシンボルが含まれているコンパイル済みの共有ライブラリを提供することをお勧めします。NDKは常にインストールからシステムを構築し  $PROJECT/libs/<abi>/ 、そのライブラリのバージョンを抽出シンボルが、あなたはでデバッグバージョンを使用することができます  ndk-gdb デバッグ。

ABIプリコンパイルライブラリを選択します

あなたのターゲットABIのために事前にコンパイルの共有ライブラリの正しいバージョンを選択してください。Android.mk ファイル  TARGET_ARCH_ABI 変数は、適切なライブラリへのシステムポイントのバージョンをコンパイルすることができます。

たとえば、あなたのプロジェクトがライブラリ含まれているとし  libfoo.so 、次の二つのバージョンのを:

    armeabi / libfoo.so 
    のx86 / libfoo.so
    
 

次のコードは、使用する方法を示し  TARGET_ARCH_ABI、ライブラリの適切なバージョンを選択するようにシステムをコンパイルするためには、:

    $(CLEAR_VARS)が含ま
    LOCAL_MODULEを:= FOO-構築済み
    LOCAL_SRC_FILES:= $(TARGET_ARCH_ABI)/libfoo.so 
    LOCAL_EXPORT_C_INCLUDES:= $(LOCAL_PATHは)/含ん
    $(PREBUILT_SHARED_LIBRARY)が含ま
    
 

あなたがいる場合  armeabi のように指定  TARGET_ARCH_ABI 値、コンパイラはにあるシステムに使用する  armeabi ディレクトリの  libfoo.so バージョンを。あなたがいる場合  x86 のように指定  TARGET_ARCH_ABI 値、コンパイラは、システムの使用する  x86 ディレクトリのバージョンを。

おすすめ

転載: www.cnblogs.com/gamesky/p/11369172.html