- 環境: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