cmakelist 库依赖库_AS使用NDK Cmake方式依赖第三方库

AS使用NDK Cmake方式依赖第三方库注意事项

AS2.2以后支持Cmake了,以前的Android.mk的方式可以告别了,官方教程

CMakeLists.txt文件的书写

引入第三方库使用add_library()需要指定是SHARED->.so or STATIC->.a,和IMPORTED,并且每次只能写一个库,如果引入2个第三方库就要写2个add_library()

add_library(

nn

SHARED

IMPORTED

)

include_directories()用于指定头文件的,一般是在include文件夹下,可以用于第三方库或者自己源文件的头文件.

include_directories(src/main/jni/armeabi-v7a/include/)

在引入第三方库时还需要指定set_target_properties()库的路径,也就是.soor.a库文件的路径,这里要注意的是为了区分CPU架构,不同版本的.so文件放的路径也不一样,所以要用${ANDROID_ABI}来指定路径,这也让我们必须把对应CPU架构的.so文件放在指定CPU架构目录下(这里只有armeabi-v7a):

![cpu架构.png](http://upload-images.jianshu.io/upload_images/1638086-d0faebf2a7f41dee.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

set_target_properties(nn

PROPERTIES IMPORTED_LOCATION

${CMAKE_SOURCE_DIR}/src/main/jni/${ANDROID_ABI}/lib/libnn.so

)

如果直接写相对路径可能会出现 Error:error: '../../../../src/main/libs/libjsoncpp.a', needed by '../obj/armeabi/libnative-lib.so', missing and no known rule to make it

如果要依赖NDK中的库

find_library( jnigraphics-lib

jnigraphics )

target_link_libraries( StackBlur

${log-lib}

${m-lib}

${jnigraphics-lib} )

附上CMakeLists.txt全部内容:

cmake_minimum_required(VERSION 3.4.1)

add_library( native-lib

SHARED

src/main/cpp/native-lib.cpp )

# 添加实验室nn.so库

add_library(

nn

SHARED

IMPORTED

)

set_target_properties(nn

PROPERTIES IMPORTED_LOCATION

${CMAKE_SOURCE_DIR}/src/main/jni/${ANDROID_ABI}/lib/libnn.so

)

# 指定头文件路径

include_directories(src/main/jni/armeabi-v7a/include/)

find_library( log-lib

log )

target_link_libraries( native-lib nn ${log-lib} )

Gradle的书写

AS创建时就是使用的cmake,所以Gradle基本都没啥问题,需要添加的可能有一下几点

指定需要编译的abi版本,在android{}->defaultCondfig{}下

ndk {

abiFilter 'armeabi-v7a'

}

指定c++版本和异常处理

externalNativeBuild {

cmake {

cppFlags "-std=c++11 -frtti-fexceptions"

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CMake中安装第三方库有多种方法。一种常见的方法是使用find_package命令。这个命令可以用来查找和引入系统已经安装的。您可以在CMakeLists.txt文件中使用find_package命令,并指定您要引入的的名称。CMake会根据您的系统配置自动查找这个,并将其引入到您的项目中。这种方法的优点是简单方便,不需要手动下载和设置的构建过程。 另一种方法是使用include(FetchContent)命令。这个命令允许您从指定的URL或Git存储中提取第三方库,并将其作为CMake项目的子目录构建。使用FetchContent命令时,您无需手动下载、解压缩或设置外部的构建过程,CMake会自动执行这些任务。这种方法的优点是它使得引入第三方库更加方便,并且使得与外部的集成更加简单。同时,使用FetchContent命令时,您可以很容易地在您的CMake项目中指定外部的版本和源代码位置。 另外,对于Android开发,您可以使用NDK-Build编译出各平台的so文件,然后将这些文件引入到您的CMake项目中。这种方法适用于调用第三方库的场景。您可以在CMakeLists.txt文件中使用add_library命令,将这些so文件添加到您的项目中。 综上所述,安装第三方库的方法包括使用find_package命令、include(FetchContent)命令和使用NDK-Build编译出so文件。您可以根据您的具体需求和项目情况选择适合的方法来安装第三方库。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值