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

Ubuntu系统下交叉编译Android的X265库

        本次交叉编译是在Ubuntu20.4上进行的。

一、下载X265源码:

        1、下载X265源码包

        x265源码下载地址:Bitbucket

        在这里选择x265_4.1版本的

       2、解压缩x265_4.1.tar.gz

        创建一个x265的文件夹放置下载x265_4.1.tar.gz,并解压缩x265_4.1.tar.gz。 

    tar -xvf x265_4.1.tar.gz x265_4.1/

二、下载NDK:

        1、下载解压:

在NDK 下载 NDK 下载  |  Android NDK  |  Android Developers下载Liunx平台的NDK。

       在这里下载的是android-ndk-r27c-linux.zip版本的。

        解压android-ndk-r27c-linux.zip

        unzip android-ndk-r27c-linux.zip 

        

        2、修改android-ndk-r27c-linux权限:

    sudo chmod 777 -R android-ndk-r27c

        3、获取NDK存放的路径:

        在NDK的文件夹中找到ndk-build存放的路径,可以cd到NDK文件夹下pwd后获取:

       

        4、NDK环境变量的配置:

        1)、使用如下命令行在.bashrc中添加NDK的路径:

    sudo gedit ~/.bashrc

        2)、在.bashrc的文件末尾加入3中获取的ndk路径,保存并退出:

    #Android NDKexport ANDROID_NDK=/home/wyy/Android/android-ndk-r27cexport PATH=$PATH:$ANDROID_NDK

        3)、使用如下命令行更新环境变量的配置:

    source ~/.bashrc

        4)、测试NDK的配置:

        命令行使用如下测试ndk配置是否成功:

    ndk-build -v

三、X265源码配置及编译:

        在x265_4.1/build/readme.txt中对构建做了具体描述,而在这里的目的是交叉编译出Android平台的构建文件。下面截图部分是关于aarch64交叉编译的描述:

= Build Instructions for cross-compilation for Arm AArch64 Targets =Cross compilation of x265 for AArch64 targets is possible on x86 platforms by
passing a toolchain file when running CMake to configure the project:* cmake -DCMAKE_TOOLCHAIN_FILE=<path-to-toolchain-file>Toolchain files for AArch64 cross-compilation exist in the /build directory.
These specify a default cross-compiler to use; however this can be overridden
by setting the CMAKE_C_COMPILER and CMAKE_CXX_COMPILER CMake variables when
running CMake to configure the project. For example:* cmake -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++The following AArch64 ISA features are turned on by default when cross-compiling:* Neon DotProd, mandatory from Armv8.4
* Neon I8MM, mandatory from Armv8.6
* SVE, mandatory from Armv9.0
* SVE2, mandatory from Armv9.0If the target platform does not support Armv8.4 Neon DotProd instructions, the
ENABLE_NEON_DOTPROD CMake option should be set to OFF:

        由上可知在编译X265前要设置一些工具链的设置,接下来就一些具体的操作步骤:

        1、配置NDK的交叉编译的工具链的环境变量:

        把ndk交叉编译工具链的路径配置到环境变量中,命令行sudo gedit ~/.bashrc编辑。加入如下的代码:

#Android NDK TOOLCHANS
export NDK_TOOLCHANS=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin
export PATH=$PATH:$NDK_TOOLCHANS

         保存退出,并更新.bashrc的配置:

    source ~/.bashrc

        2、定位crosscompile.cmake文件:

          在.../x265/x265_4.1/build/aarch64-linux的文件夹下,找到crosscompile.cmake文件。如下操作:

       

        3、修改crosscompile.cmake文件内容:

    sudo gedit crosscompile.cmake

        1)、找到crosscompile.cmake中的如下代码

set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)

        2)、把上面的代码替换成如下的配置

set(CMAKE_C_COMPILER aarch64-linux-android24-clang)
set(CMAKE_CXX_COMPILER aarch64-linux-android24-clang++)

        3)、交叉编译工具链的替换:

        以上的原则是因为:原X265中的编译链使用linux中的gnu-gcc编译工具链,现在把它设置成Android NDK的编译工具链,从而用于交叉编译

        

        4、运行make-Makefiles.bash

        

        1)、运行../x265/build/aarch64-linux文件夹下的make-Makefiles.bash:

        运行中的日志如下解释a:

        如下中框选的日志就是NDK的交叉编译工具链的环境变量,在X265文件夹下的crosscompile.cmake文件中CMAKE_C_COMPILERCMAKE_CXX_COMPILER的映射。

运行中的日志如下解释b:

        “Could NOT find NUMA (missing: NUMA_ROOT_DIR NUMA_INCLUDE_DIR NUMA_LIBRARY)”,说明系统中没有安装NUMA库的软件。

        安装NUMA库:

    sudo apt-get update /sudo apt-get install numactl  /  #安装numactlnumactl --hadware             / #检测numactlsudo apt-get install libnuma-dev /#安装libnuma-dev

        安装后再重新运行make-Makefiles.bash,报错日志提示会减少为:“Could NOT find NUMA (missing: NUMA_LIBRARY) ”。

        

运行中的日志如下解释c:

        "Could NOT find nasm (missing: NASM_EXECUTABLE)",说明系统中没有安装nasm库的软件。

        安装nasm:

    sudo apt-get update    /sudo apt-get install nasm    /nasm -v

        安装nasm之后,重新运行make-Makefiles.bash。日志里面能打印出nasm版本了:

        2)、接下来会编译一会儿弹出如下选项界面:

        3)、修改选界面配置:

       在修改界面配置前,在../x265的文件夹下创建一个android_build用于存放编译成的文件。

  • 把CMAKE_INSTALL_PREFIX这项改为/home/wyy/x265/android_build(按向下键定位到该项,再按回车键,即可按照vi方式编辑路径);
  • 把ENABLE_ASSEMBLY这项改为OFF(按向下键定位到该项,再按回车键,即可把ON改为OFF)
  • 把ENABLE_CLI这项改为OFF(按向下键定位到该项,再按回车键,即可把ON改为OFF)

        上述的配置完成之后,按c键开始配置,再按e键退出配置,然后按g键开始生成。

        4)、make编译:

        进入../x265/build/aarch64-linux进行make编译:

        

                编译报错:
d.lld: error: unable to find library -lpthread
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [CMakeFiles/x265-shared.dir/build.make:184: libx265.so.215] Error 1
make[1]: *** [CMakeFiles/Makefile2:176: CMakeFiles/x265-shared.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

             问题修复:

         进入x265_4.1源码目录 ../build/aarch64-linux/CMakeFiles/x265-shared.dir,进行如下修改

  • a、修改该目录的link.txt,把文件中的所有“libx265.so.215”替换为“libx265.so”。同时删除文件末尾的“ -lpthread ”。如下图所示:

  • b、如在同目录存在relink.txt的话,修改说明同link.txt。

  • c、修改同目录下面的build.make,把该文件中的所有“libx265.so.215”替换为“libx265.so”,把所有的“libx265.so”替换为“libx265.so.215”。注意A和B互换名称的时候,可以设定第三个名称C,比如先把A替换为C,接着B替换为A,然后C替换为B
     

         经过以上a、b、c步骤的修复,重新make编译后,没有报错了:

        5)、make install编译:

        则在“ 3)、修改选界面配置”中设置的“编译文件放置的位置”——“/home/wyy/x265/android_build”里面生成两个“include”和“lib”文件夹,就是需要的的交叉编译的结果。

        

四、编译结果的展示:

        

        1、include:

        包含“x265.h”及“x265_config.h”两个头文件。

        2、lib:

        包含"pkgconfig"、"libx265.a"、"libx265.so"、"libx265.so.215"四个文件夹及文件:

http://www.xdnf.cn/news/1144801.html

相关文章:

  • Leetcode 04 java
  • cartorgapher的编译与运行
  • 网工知识——vlan技术
  • Linux操作系统之线程:分页式存储管理
  • 记录DataGrip 2025.1.3破解失败后,无法重启问题修复
  • 从“代码工坊“到“思维引擎“:Claude Code如何重塑编程权力结构
  • 习题4.1 输出3个人的顺序
  • 一文了解CDA
  • 优先算法——专题九:链表
  • 25数据库三级备考自整理笔记
  • 让管理软件回归简单实用:软件定制开发之道
  • 微信小程序商品结算功能
  • 网络原理 ——HTTPS
  • Linux服务器端口被占用?
  • 【leetcode】3202. 找出有效子序列的最大长度(2)
  • RV126平台NFS网络启动终极复盘报告
  • 二进制专项
  • 分表聚合助手类
  • 常用的折叠展开过渡动画效果css
  • 20250718-5-Kubernetes 调度-Pod对象:重启策略+健康检查_笔记
  • Python数据类型探秘:解锁编程世界的魔法钥匙
  • JavaScript 的垃圾回收机制
  • Maven下载安装与idea配置
  • FLTK UI窗口关闭时延时卡顿问题全流程分析与优化实战
  • 探索 Vue 3.6 的新玩法:Vapor 模式开启性能新篇章
  • 帆软可视化图
  • Vue3 从 0 到 ∞:Composition API 的底层哲学、渲染管线与生态演进全景
  • JavaScript笔记
  • 【JS笔记】Java Script学习笔记
  • C#将【程序集引用-依赖关系】展示到NetronLight图表中