当前位置:首页 » 编程软件 » 交叉编译目录

交叉编译目录

发布时间: 2025-03-23 14:53:08

‘壹’ 在 ubuntu-x86 下交叉编译 ARM-64 NCNN 记录贴

在 Ubuntux86 下交叉编译 ARM64 NCNN 的步骤如下

  1. 配置主机环境

    • 确保已安装 Docker。
    • 拉取基于 qemu 的 ARM64 镜像,选择与嵌入式板子版本相应的镜像链接。
  2. 启动 Docker 容器并挂载工作目录

    • 配置工作目录,例如 /home/ubuntu/Docker/cross。
    • 启动 Docker 容器,并将工作目录挂载到容器中,以便在本地模拟 ARM64 环境进行编译。
  3. 在容器内编译 NCNN

    • 按照官网教程拉取 NCNN 代码到挂载的工作目录中。
    • 在容器内更新源、安装基础包,并替换为清华镜像源以获取 ARM64 架构的依赖包。
    • 开始编译 NCNN,编译过程与直接在 ARM64 板子上相同。
    • 编译产物默认位于 build/install 目录下。
  4. 验证和评估性能

    • 编译完成后,可以将产物直接复制到板子上使用。
    • 或在容器内部运行 NCNNBenchmark 以评估性能,注意 x86 模拟 ARM64 的性能会有较大折扣。
  5. 编译 python 封装

    • 若需要编译 NCNN 的 Python 封装,在容器中安装与板子上相同的 Python 版本。
    • 编译好的 PyNCNN 库位于 build/python 目录下。
    • 可以将整个 NCNN 目录复制到板子上,并使用 pip install e . 命令安装。

总结: 使用 qemu 模拟 ARM64 实现的交叉编译,无需配置本地交叉编译器等额外环境,适用于正式部署前的验证。 虽然编译效率相比直接在 ARM64 板子上低,但相比嵌入式板子的性能有显着提升。 此方案对其他库的编译依赖友好,如 QT 等复杂库的交叉编译也值得尝试。

‘贰’ FFmpeg开发笔记(八)linux交叉编译Android的FFmpeg库

在Linux环境中进行FFmpeg库的Android交叉编译,首先需要下载Linux版本的android-ndk-r21e。登录Linux服务器,例如华为云的欧拉系统,执行以下步骤:

1. 进入`/usr/local/src`目录:

cd /usr/local/src

2. 下载并解压ndk:

curl -O dl.google.com/android/r...

unzip android-ndk-r21e-linux-x86_64.zip

接下来,你需要将FFmpeg及相关库(如x264、freetype、lame)的源码上传到服务器,并进行必要的修改:

- 解压源码,替换`SYSTEM=windows-x86_64`为`SYSTEM=linux-x86_64`,并确保sh文件无回车符。
- 修改`config_x264.sh`、`config_freetype.sh`等文件,赋予可执行权限:

chmod +x config_*.sh

3. 编译x264库,修改configure文件并执行编译:

修改configure文件

./config_x264.sh

make -j4

make install

4. 对其他第三方库进行类似操作:

./config_xxx.sh

make -j4

make install

5. 配置环境变量`PKG_CONFIG_PATH`:

在.bash_profile中添加环境变量

source .bash_profile

6. 最后,编译FFmpeg库:

./config_ffmpeg_full.sh

make -j4

make install

完成后,可以在指定目录找到so文件,并将其复制到App工程的jniLibs\arm64-v8a目录,然后按照《FFmpeg开发实战:从零基础到短视频上线》的章节“12.1.3 App工程调用FFmpeg的so库”进行App的配置、编译和运行。

‘叁’ Linux 交叉编译FFmpeg库

Linux 交叉编译FFmpeg库

配置环境

在Linux上配置NDK环境和FFmpeg,首先下载并解压NDK,配置/etc/profile的环境变量,然后下载FFmpeg,解压后使用./configure --help查看帮助文档。

FFmpeg包含libavformat、libavcodec、libavutil、libswscale、libpostproc等模块,为各种音视频封装格式的生成和解析、声音/图像编解码、公共工具函数、视频场景比例缩放和色彩映射转换、后期效果处理以及工具和服务器等。

编写编译脚本

定义NDK路径,指定GCC路径,设置FLAGS结合Linux环境修改,参考externalNativeBuild/xxx/build.ninja的传参内容。学习资料推荐,免费报名学习音视频知识,资料包括C/C++、Linux、FFmpeg等。

配置参数

优化大小、不编译ffmpeg程序(命令行工具)、关闭avdevice模块、关闭所有编码器、关闭所有复用器、关闭所有滤镜、开启交叉编译、设置GCC的前缀、关闭动态库、开启静态库、传给gcc的参数等。

执行make完成编译输出

编写脚本过程中注意关闭asm、权限要求、手动创建输出文件夹、命令行格式等。

移植到Android项目中使用

创建NDK项目,将编译好的include文件夹复制到/src/main/cpp目录下,将ffmpeg lib目录下的文件复制到armeabi-v7a目录下,Cmake文件中引入库,即可愉快使用FFmpeg库。

FFmpeg是纯C的库,需要在代码中进行引用。显示ffmpeg版本号完成整个流程。

至此,Linux交叉编译FFmpeg库的流程介绍完成。

‘肆’ 如何交叉编译perl

  • 先下载Perl源码:https://www.perl.org/get.html , 下载版本是5.10.1

  • 下载Perl交叉编译源码补丁: https://sourceforge.net/projects/perlcross.berlios/files/, 下载版本是:perl-5.10.0-cross-0.3.tar.gz

  • 分别解压连个文件到同一个目录下;


  • 1

  • 在ubuntu中安装 perlbrew:

  • sudo apt-get install perlbrew
    perlbrew init
    source ~/perl5/perlbrew/etc/bashrc
    perlbrew install perl-5.10.1
  • 2

  • 3

  • 4

  • 5

  • 等待perlbrew安装完毕;


  • 2

  • 3

  • 1

  • 合并 两个解压出来的perl目录,进入perl-5.10.1的Cross目录中:

  • cp -rfv perl-5.10.0/* perl-5.10.1/
    cd perl-5.10.1/Cross


  • 2

  • 1

  • 文件内容如下注意加了星号的内容:

  • ### Target Arch
    ** ARCH = arm **
    #ARCH = i386-pc
    #ARCH = sh4
    #ARCH = mips
    #ARCH = mipsel
    #ARCH = ppc

    ## Specific arm
    **#CONFIG_TARGET_ARM_SA11X0 = 1**
    #CONFIG_TARGET_ARM_XSCALE = 1

    ### Target OS
    **OS = linux**
    #OS = solaris2.8
  • 1

  • 修改perl的config文件

  • gedit Cross/config ##或者 vi gedit Cross/config
  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 上面加粗字体表示注意的或者修改的;

  • 修改当前目录(Cross目录)中的Makefile文件:
    先改变一下目录内容的权限:
    chmod 777 /Cross/*

  • 修改的Makefile文件内容:

  • export TOPDIR=${shell pwd}

  • include $(TOPDIR)/config

  • export CFLAGS

  • ** export SYS=arm-linux **

  • ** export CROSS=/stuff/bitbake/bin/tmp/sysroots/i686- linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi- **

  • ** export LD_LIBRARY=/stuff/bitbake/bin/tmp/sysroots/i686-linux/usr/lib:$(LD_LIBRARY_PATH) **

  • export FULL_OPTIMIZATION = -fexpensive-optimizations -fomit-frame-pointer -O2

  • export OPTIMIZATION = -O2


  • export CC = arm-angstrom-linux-gnueabi-gcc

  • export CXX = arm-angstrom-linux-gnueabi-g++

  • export LD = arm-angstrom-linux-gnueabi-ld

  • export STRIP = arm-angstrom-linux-gnueabi-strip

  • export AR = arm-angstrom-linux-gnueabi-ar

  • export RANLIB = arm-angstrom-linux-gnueabi-ranlib

  • 12345678910111213141516

  • make CC=arm-angstrom-linux-gnueabi-gcc ARCH=arm patch

  • make CC=arm-angstrom-linux-gnueabi-gcc ARCH=arm perl

  • 编译会出错,但是没关系,会在根目录生成perl可执行文件;

热点内容
临沂c语言 发布:2025-03-25 02:11:58 浏览:979
二维码访问密码是多少 发布:2025-03-25 02:11:56 浏览:370
服务器想ping通其他段的ip 发布:2025-03-25 02:11:22 浏览:218
安卓机皇现状如何 发布:2025-03-25 02:04:54 浏览:318
机场密码箱多少寸 发布:2025-03-25 01:46:27 浏览:842
php分离 发布:2025-03-25 01:42:10 浏览:161
加密型移动硬盘 发布:2025-03-25 01:39:41 浏览:270
公司域网服务器搭建 发布:2025-03-25 01:29:04 浏览:763
剑侠情缘手游精灵脚本 发布:2025-03-25 01:28:57 浏览:467
硬盘分区怎么改成ftp 发布:2025-03-25 01:26:01 浏览:119