当前位置: 首页 > news >正文

Windows环境下使用Cmake ndk编译fdk-aac

 

 一、废话

最近学习,第一步就是编译.我们需要编译FFmpag,x264,fdk_aac,下面是x264,网上说的很多都是几百年前的,我亲测完美可用

还是那句话 我能力有限,但是我希望我写的东西能够让更多的人能够接受.我也是刚刚接触.做一个记录,也希望能够对其他人有好处.
联系我可以直接评论,也可以加我QQ:2519687025

 

 二、干货 

 

 

 

 

  准备:1.fdk_aac的源码  git clone https://android.googlesource.com/platform/external/aac

3.需要下载cmake 直接在cmd里面就可以了,之前的FFmpeg和x264都是cygwin里面的.现在不用.需要设置cmake环境变量,加入到path里面

 

4.编译脚本.这个脚本自己去理解吧.我也是一知半解--脚本名称:CMakeLists.txt

 

# source code: git clone https: // android.googlesource.com/platform/external/aac
cmake_minimum_required ( VERSION  2.8 )

if (CMAKE_SYSTEM_NAME STREQUAL Android )
     if ( NOT CMAKE_SYSTEM_PROCESSOR )
        set ( CMAKE_SYSTEM_PROCESSOR    armeabi-v7a )
    endif ()
     if ( NOT CMAKE_SYSTEM_VERSION )
        set ( CMAKE_SYSTEM_VERSION       8 )
    endif ()
     if ( NOT NDK_TOOLCHAIN_VERSION) 
        set ( NDK_TOOLCHAIN_VERSION      4.8 )
    endif ()

    set ( ANDROID_NDK_ROOT $ENV{ANDROID_NDK_ROOT} )

    find_path ( TOOLCHAIN_ROOT bin PATHS ${ANDROID_NDK_ROOT}/toolchains/arm-linux-androideabi-${NDK_TOOLCHAIN_VERSION}/prebuilt /*  )

    include ( CMakeForceCompiler )

    find_program ( CMAKE_C_COMPILER   arm-linux-androideabi-gcc PATHS ${TOOLCHAIN_ROOT}/bin )
    find_program ( CMAKE_CXX_COMPILER arm-linux-androideabi-g++ PATHS ${TOOLCHAIN_ROOT}/bin )
    find_program ( CMAKE_AR           arm-linux-androideabi-ar  PATHS ${TOOLCHAIN_ROOT}/bin )

    cmake_force_c_compiler      ( ${CMAKE_C_COMPILER} GNU )
    cmake_force_cxx_compiler    ( ${CMAKE_CXX_COMPILER} GNU )

    set ( CMAKE_SYSROOT         ${ANDROID_NDK_ROOT}/platforms/android-${CMAKE_SYSTEM_VERSION}/arch-arm  CACHE PATH "" )

    set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
    set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
    set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )

endif ()

project ( fdk-aac )

if ( NOT INCLUDE_INSTALL_DIR )
    set ( INCLUDE_INSTALL_DIR include )
endif ()

if ( NOT ARCHIVE_INSTALL_DIR )
    set ( ARCHIVE_INSTALL_DIR lib/static )
endif ()

if ( NOT IS_DIRECTORY ${FDK_AAC_SOURCE_DIR} )
    message ( FATAL_ERROR "FDK_AAC_SOURCE_DIR=${FDK_AAC_SOURCE_DIR} is not a dir" )
endif ()

if ( CMAKE_SYSTEM_NAME STREQUAL Android )
    add_definitions (
        --sysroot=${CMAKE_SYSROOT}
        -fPIC
        -march=armv7-a
        -mfpu=vfpv3-d16
        -DANDROID
        -mhard-float
        -D_NDK_MATH_NO_SOFTFP=1
        -lm_hard )
endif ()

add_definitions (
    -fno-rtti
    -fno-exceptions )

set ( SOURCE_FILES )

foreach ( subdir
    libAACdec libAACenc libFDK
    libMpegTPDec libMpegTPEnc
    libPCMutils
    libSBRdec libSBRenc
    libSYS )

    set ( __inc_dir ${FDK_AAC_SOURCE_DIR}/${subdir}/include )

    include_directories ( ${__inc_dir} )
    install ( DIRECTORY ${__inc_dir}/ DESTINATION ${INCLUDE_INSTALL_DIR}/fdk-aac/ )

    file ( GLOB __src_files
        ${FDK_AAC_SOURCE_DIR}/${subdir}/src/*.cpp
        ${FDK_AAC_SOURCE_DIR}/${subdir}/src/*.h )
    list ( APPEND SOURCE_FILES ${__src_files} )
endforeach ()

add_library ( fdk-aac STATIC
    ${SOURCE_FILES} )

install ( TARGETS fdk-aac
    ARCHIVE DESTINATION ${ARCHIVE_INSTALL_DIR} )

 

   三、编译

这个的编译相对简单 ,只要下载cmake就可以了.直接cmake就可以了.

 

1 .定位到编译目录

2.执行cmake 命令
cmake -G "MinGW Makefiles" -DCMAKE_SYSTEM_NAME=Andr
oid -DFDK_AAC_SOURCE_DIR="E:/soft/source/fdk_aac/aac" E:\qupai_code_eclipse\code
\ThirdParty\Build\fdk-aac -DCMAKE_MAKE_PROGRAM=E:\android-ndk-r9c\prebuilt\windo
ws\bin\make.exe

3 .cmake --bulid . -- -j8 

注意:DFDK_AAC_SOURCE_DIR="你的fdk_aac的源码地址" 

 E:\qupai_code_eclipse\code\ThirdParty\Build\fdk-aac ----这里是你的CMakeLists.txt地址

DCMAKE_MAKE_PROGRAM=NDK的make地址

 

 

转载于:https://www.cnblogs.com/shansheng/p/3900043.html

相关文章:

  • LightOJ - 1148 - Mad Counting
  • ubuntu里打开rar,zip文件方法
  • class 的使用
  • ViewSwitcher的功能和用法
  • 承上启下——牛腩新闻发布系统总结
  • Hyper Prefix Sets
  • Autofac
  • get和post请求的设置
  • 第二届360杯全国大学生信息安全技术大赛部分解题思路(数字取证)
  • php 获取请求参数
  • 关于Repeater嵌套绑定的问题
  • cefsharp设置默认语言
  • 华为2015校园招聘机试
  • c:if标签的使用
  • 字符串拼接 strcat ;数组和指针的区别
  • 【刷算法】求1+2+3+...+n
  • ERLANG 网工修炼笔记 ---- UDP
  • ES学习笔记(12)--Symbol
  • java8-模拟hadoop
  • jdbc就是这么简单
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Laravel Mix运行时关于es2015报错解决方案
  • leetcode388. Longest Absolute File Path
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Linux各目录及每个目录的详细介绍
  • Python 反序列化安全问题(二)
  • Redis在Web项目中的应用与实践
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 简单基于spring的redis配置(单机和集群模式)
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 转载:[译] 内容加速黑科技趣谈
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # .NET Framework中使用命名管道进行进程间通信
  • #define,static,const,三种常量的区别
  • #pragam once 和 #ifndef 预编译头
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (3)nginx 配置(nginx.conf)
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (第二周)效能测试
  • (二)hibernate配置管理
  • (翻译)terry crowley: 写给程序员
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (接口封装)
  • (排序详解之 堆排序)
  • (七)c52学习之旅-中断
  • .Net - 类的介绍
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .NET HttpWebRequest、WebClient、HttpClient