Cmake常用指令介绍

作者: 慕涵盛华 | 来源:发表于2018-04-19 10:49 被阅读25次

最近在用FFmpeg做视频播放的时候,在使用ANativeWindow *nativeWindow = ANativeWindow_fromSurface(env, surface);总是报error: undefined reference to 'ANativeWindow_fromSurface',对应的头文件都引入了。可是还是报未定义。然后经过查找原来是Cmake配置出错了。这里对NDK开发中Cmake常用的指令做介绍,其详细介绍请查看:Android NDK 开发:CMake 使用

cmake_minimum_required(VERSION 3.4.1)

include_directories(${JNI_LIBS_DIR}/includes)

find_library(log-lib log)

add_library(native-lib
            SHARED
            src/main/cpp/native-lib.c )

set(JNI_LIBS_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs)

add_library(avutil
            SHARED
            IMPORTED )
set_target_properties(avutil
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavutil.so )

add_library(swresample
            SHARED
            IMPORTED )
set_target_properties(swresample
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libswresample.so )

add_library(avresample
            SHARED
            IMPORTED )
set_target_properties(avresample
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavresample.so )

add_library(swscale
            SHARED
            IMPORTED )
set_target_properties(swscale
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libswscale.so )

add_library(avcodec
            SHARED
            IMPORTED )
set_target_properties(avcodec
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavcodec.so )

add_library(avformat
            SHARED
            IMPORTED )
set_target_properties(avformat
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavformat.so )

add_library( avfilter
             SHARED
             IMPORTED )
set_target_properties(avfilter
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavfilter.so )

add_library(avdevice
            SHARED
            IMPORTED )
set_target_properties(avdevice
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavdevice.so )
target_link_libraries(native-lib
                      avutil swresample avresample swscale avcodec avformat avfilter avdevice android
                      ${log-lib} )

上述文件是做FFmpeg开发时,Cmake的配置文件

1.cmake_minimum_required(VERSION 3.4.1)

设置编译 native library 需要最小的 cmake 版本,不设置的话会报错。

2.include_directories(${JNI_LIBS_DIR}/includes)

用来向工程添加多个特定的头文件搜索路径

3.find_library(log-lib log)

找库

4.set(JNI_LIBS_DIR ${CMAKE_SOURCE_DIR}/src/main/jniLibs)

定义变量,用JNI_LIBS_DIR来代替后面的路径

5.将本地源文件编译成指定的so库

#将native-lib.c 编译成 libnative-lib.so库
add_library(native-lib
            SHARED
            src/main/cpp/native-lib.c )

6.引入第三放so库

#引入第三方 liavutil.so库,倒入后需要使用 target_link_libraries 链接该库,才可以直接使用该库
add_library(avutil
            SHARED
            IMPORTED )
#指定要倒入库的路径,add_library,在执行该指令  ,最后链接才能使用
set_target_properties(avutil
                      PROPERTIES IMPORTED_LOCATION
                      ${JNI_LIBS_DIR}/${ANDROID_ABI}/libavutil.so )

7.链接动态库

#添加链接库(我们使用的三方库)
target_link_libraries(native-lib
                      avutil swresample avresample swscale avcodec avformat avfilter avdevice android
                      ${log-lib} )

文章开头说的那个错误,是因为没有链接android这个库,所以才会报错的。

总结

通过add_library来指定要引入的库 ,通过 set_target_properties 来指定该库的路径,最后通过target_link_libraries来链接我们引入的库,只有这样我们才能使用。

关注微信公众号获取更多相关资源

Android行动派

相关文章

  • Cmake常用指令介绍

    最近在用FFmpeg做视频播放的时候,在使用ANativeWindow *nativeWindow = ANati...

  • CMake 学习笔记

    引子Make or CMake,What's different?CMake简介[附]CMake常用指令 引子 人...

  • Cmake命令整理

    一、cmake的常用指令各个命令调用参数中间是空格隔开的1、cmake_minimum_required(VERS...

  • cmake

    cmake指令

  • Android Cmake教程 未完待续......

    一、CMake常用变量一般来说,我们可以用set指令显示定义一个变量,但CMake系统已经帮我们隐式预定义了一些变...

  • Vue基础知识介绍

    本节主要介绍Vue.js开发中的常用指令介绍,后续会持续补充 1. vue中常用的v-指令 v-text // 是...

  • vue.js单文件组件入门笔记

    nodeJs nodeJs安装 nodeJs模块 npm介绍 cnpm npm常用指令介绍 npm in...

  • redis常用指令总结以及功能介绍

    redis常用指令总结以及功能介绍 - 前行的snail - CSDN博客 第一部分 redis的常用指令 一、针...

  • ng-常用指令

    简介 ng指令Angular提供的开箱即用指令,下面这里介绍开发项目中最常用的指令。 ng-mod...

  • Docker下的网络模式

    前言 在docker常用指令详解一文中介绍了docker的常用指令, 在构建容器的时候使用了 --net anye...

网友评论

    本文标题:Cmake常用指令介绍

    本文链接:https://www.haomeiwen.com/subject/iygikftx.html