NDK16_Android.mk和CMakeLists.txt

  • 環境:Linux(C++編譯生成的庫要在手機Linux環境中使用)

NDK提供了編譯c/cpp文件的工具,和一些可用的外部庫,如log
靜、動態庫實現存在於相應路徑,例如:
C:\Users\PF0ZYBAJ\AppData\Local\Android\Sdk\ndk-bundle\platforms\android-21\arch-arm\usr\lib

CMakeLists.txt

安卓現在的版本,默認的NDK支持配置文件
find_library( # Sets the name of the path variable.
log-lib

          # Specifies the name of the NDK library that
          # you want CMake to locate.
          log )

表示在預設的目錄中尋找log庫,把路徑賦值給log-lib,然後使用 ${log-lib}
target_link_libraries( # Specifies the target library.
native-lib

                   # Links the target library to the log library
                   # included in the NDK.
                   ${log-lib} )

Android加載第三方庫

  • 1、 直接編譯出so (相當於打一個jar包)
    編譯一次就行了
    缺點:不方便調試

  • 2、 把所有源文件放到as裏面
    方便調試與修改
    缺點:編譯時間長;cmakelist.txt、android.mk 寫一大堆,而且還不知道怎麼寫(完全讀懂它的configuration以及生成的makefile)

三 配置NDK環境變量

(將C++文件編譯成能夠在手機上運行的so庫)
下載
配置環境變量

四 相關shell命令

–sysroot=XX
使用xx作爲這一次編譯的頭文件與庫文件的查找目錄,查找下面的 usr/include usr/lib目錄
-isysroot XX
頭文件查找目錄,覆蓋–sysroot ,查找 XX/usr/include
-isystem XX
指定頭文件查找路徑(直接查找根目錄)
-IXX
頭文件查找目錄
優先級:
-I -> -isystem -> sysroot

-LXX
指定庫文件查找目錄
-lxx.so
指定需要鏈接的庫名

查找 目錄1/usr/lib 的庫文件
目錄2 /usr/include 的頭文件
還去查找 目錄3 下的頭文件
還去查找 目錄4 下的頭文件
gcc --sysroot=目錄1 -isysroot 目錄2 -isystem 目錄3 -I目錄4 main.c

gcc -L目錄1 -l庫名

javac -classpath xxx

例子: 鏈接ndk的日誌庫
gcc -LC:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle\platforms\android-21\arch-arm\usr\lib
-llog -lGLESv2

gcc --sysroot=C:\Users\Administrator\AppData\Local\Android\Sdk\ndk-bundle\platforms\android-21\arch-arm
-llog -lGLESv2

$CC --sysroot=ND/platforms/android-21/arch-arm -isystem NDK\sysroot\usr\include
-isystem NDK\sysroot\usr\include\arm-linux-androideabi

export AAA="–sysroot=/root/android-ndk-r17b/platforms/android-21/arch-arm -isystem /root/android-ndk-r17b/sysroot/usr/include -isystem /root/android-ndk-r17b/sysroot/usr/include/arm-linux-androideabi

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章