<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [Android NDK開發學習(一):環境的配置](http://blog.csdn.net/qq_17766199/article/details/48174875) [Android NDK開發學習(二):學習官方Demo : HelloJni](http://blog.csdn.net/qq_17766199/article/details/48179073) [Android NDK開發學習(三):創建第一個項目](http://blog.csdn.net/qq_17766199/article/details/48241815) **Android NDK開發學習(四):NDK配置介紹** NDK程序可以使用兩個配置文件:Android.mk和Application.mk,其中Android.mk文件主要描述了如何編譯C/C++代碼,而Application文件用于描述當前應用程序需要哪些模塊。(因為本人解除NDK時間也不長,所以相關的關鍵字遇到的也不多。這里介紹一些自己遇到的。以后有新的會持續更新。) 這里我采取的方法時導入官方Demo:HelloNeon和NativeActivity這個項目。查看Android.mk和Application.mk文件。對遇到的關鍵詞進行查找資料。這里匯總一下。 1、首先是HelloNeon項目的Android.mk(導入方法見前面的教程方法) ![](https://box.kancloud.cn/2016-04-26_571f24ea694dc.jpg) 由上到下: (1).第一行LOCAL_PATH:該變量用于指定當前Android.mk文件所在的路徑。必須在Android.mk文件第一行定義。 (2).第三行CLEAR_VARS: 指定一個用于**清空幾乎**所有以LOCAL_開頭的變量(除了LOCAL_PATH變量)。在Android.mk文件的第二行**必須**執行這個腳本,這是必要的,因為所有的編譯控制文件都在同一個GNU MAKE執行環境中,所有的變量都是全局的。如:include $(CLEAR_VARS)。 (3).第五行LOCAL_MODULE:該變量指定模塊名字。此名稱**必須是所有模塊名中唯一存在的,并且不包括空白分隔符**。模塊名決定生成的庫文件名,如:模塊名位Hello,生成的動態庫文件名就為libHello.so。我們在引用模塊的時候,只能使用定義的模塊名,不應使用庫文件名。 (4).第七行與第十四行LOCAL_SRC_FILES:該變量制定了參與模塊編譯的C/C++源文件名。文件名都相對于LOCAL_PATH,如果指定多個文件,中間用空格分隔。 (5).第九行和第十一行TARGET_ARCH_ABI:用于分析Android.mk的目標CPU+ABI的名稱(ABI,即應用程序二進制接口)。**所有基于ARM的ABI都必須將TARGET_ARCH變量的值設為arm,但可以設置不同的TARGET_ARCH_ABI變量值**。 (6).第十行和第十二行LOCAL_CFLAGS += -DXXX ? 相當于在所有源文件中增加一個宏定義#define XXX。 例如:代碼第十行為LOCAL_CFLAGS := -DHAVE_NEON=1 ?所以在helloneon.c文件中有如圖一段代碼: ![](https://box.kancloud.cn/2016-04-26_571f24eab7384.jpg) (7).第十七行LOCAL_STATIC_LIBRARIES表示該模塊需要使用哪些靜態庫,以便在編譯時進行鏈接。 (8).第十九行LOCAL_LDLIBS鏈接的庫不產生依賴關系,一般用于不需要重新編譯的庫,如庫不存在,則會報錯找不到。且貌似只能鏈接那些存在于系統目錄下本模塊需要連接的庫。如果某一個庫既有動態庫又有靜態庫,那么在默認情況下是鏈接的動態庫而非靜態庫。這里是鏈接log庫,用于在文件中打印信息。 (9).第二十一行BUILD_SHARED_LIBRARY指定一個建立共享庫的GNU Make腳本文件。該腳本文件會根據以“LOCAL_”開頭的變量決定如何生成共享庫,其中LOCAL_MODULE和LOCAL_SRC_FILES是必須設置的兩個變量。該變量的用法:include $(BUILD_SHARED_LIBRARY),生成的共享庫文件名是$(LOCAL_MODULE).so。 (10).要想導入一個模塊,放置如下所示的一行指令,最好放在你的Android.mk文件結束處:$(call import-module,<tag>)。這里導入 cpufeatures用于第十七行的編譯。 (11).對于第九行至第十五行的簡單理解:如果是armeabi-v7a和x86平臺則編譯helloneon-intrinsics.c.neon文件。編譯結果如下圖: ![](https://box.kancloud.cn/2016-04-26_571f24eaccbcd.jpg) 2、NativeActivity項目的Application.mk ![](https://box.kancloud.cn/2016-04-26_571f24eae3761.jpg) (1).APP_ABI在默認情況下,NDK會使用'armeabi' ABI 來生成二進制機器碼,這是基于ARMv5TE的浮點運算CPU,這可以通過使用此變量來選項不同的ABI. (2).APP_PLATFORM 制定編譯Android平臺名稱。 3、HelloNeon項目編譯后: ![](https://box.kancloud.cn/2016-04-26_571f24eb05146.jpg) 4、補充 (1).BUILD_STATIC_LIBRARY:指定一個簡歷靜態庫的GNU Make腳本。靜態庫不能被復制到Android應用程序包(apk)中,但可以用于建立共享庫。使用該變量的方法:include $(BUILD_STATIC_LIBRARY),生成的靜態庫文件名是$(LOCAL_MODULE).a。 (2).TARGET_ARCH:編譯Android的目標CPU架構的名稱。如:arm。 (3).TARGET_PLATFORM:指定分析Android.mk文件的Android平臺名稱。 (4).TARGET_ABI:用于連接目標平臺和ABI,也就是$(TARGET_PLATFORM)-$(TARGET_ARCH_ABI),主要用來測試真是設別中特定的目標系統映像。 最后附上參考鏈接:[點擊打開鏈接](http://blog.csdn.net/kwuwei/article/details/19428993)? ?[點擊打開鏈接](http://blog.csdn.net/kwuwei/article/details/21718097)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看