1、在Linux系统中的静态库与动态库
库以二进制文件的形式保存, 后缀是.a的是静态库,后缀是.so的是动态库。
静态库在打包成lib.a文件的时候,把代码都加载到内存中;动态库在打包成lib.so文件的时候,是打包成两个.so文件,目标lib.so文件存放的是函数的索引,
另一个so存放的是函数的实现。
在CMake.txt文件中,SHARE是指定生成动态库,STATIC是指定生成静态库。如果两个关键字都不加,默认是STATIC。
2、target_link_libraries()
C语言代码在执行前有两个步骤,编译和链接。要在Linux环境下将C文件编译成.so文件,然后把.so文件链接到Android项目中。Android项目链接使用到的代码为target_link_libraries()。
#添加这段代码才能导入头文件
include_directories(libs/include)
#添加这段代码才能使用avcodec-56.so文件中的方法
set(DIR ../../../../libs)
add_library(avcodec-56
SHARED
IMPORTED)
set_target_properties(avcodec-56
PROPERTIES IMPORTED_LOCATION
${DIR}/armeabi/libavcodec-56.so)
target_link_libraries(native-lib
avcodec-56
${log-lib} )
使用系统的.so文件中的头文件和C代码,比如要使用libOpenSLES.so,那么要讲OpenSLES加入到target_link_libraries()中
Tips:在APK中生成几个.so是在以下路径下查看:app->build->outputs->apk->app-debug.apk(双击打开文件)->lib