Ubuntu C++(Cmake版) X86 -> ARM64 Dockcorss 交叉编译使用过程

基于 Docker 搭建交叉编译环境 本文主要介绍如何使用 Docker 搭建交叉编译环境more关于 docker 交叉编译环境,已经有人做成开源了。我们只需使用即可搞了半天发现不支持直接安装 arm64 的包, 麻烦的地方不在于交叉编译一个简单的hllo world 而是编译需要依赖各种 qt, opencv, ssl 等库,手动编译这些库比较麻烦。而这个 docker 环境也只是简单地安装了一下交叉编译器,既然如此那我为何不直接使用 vm 虚拟机或 WSL 里交叉编译。 阅读详情

前提

你在本地Ubuntu环境下已经完成了Cmake的编译(验证你代码本身是没有问题的),但是还没有进行交叉编译

Dock安装

1、官网安装参考手册:Install Docker Engine on Ubuntu | Docker Docs

2、可以使用下面命令一键安装:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

3、查看docker版本

sudo docker version

4、测试命令

sudo docker run hello-world

5、通常情况下,操作docker命令,需要加上前缀sudo,如下:

sudo docker run hello-world

6、但是添加docker用户组之后,就可以不用加sudo前缀了。docker用户组的添加方法(在运行docker的宿主机内运行命令):

sudo groupadd docker          # 添加docker用户组

sudo gpasswd -a $USER docker  # 将当前用户添加至docker用户组,其中$USER可以自动解析到当前登陆的用户

newgrp docker                 # 更新docker用户组

7、添加上述命令之后,使用【docker images】命令测试,如果没报错,说明已经可以不使用sudo命令了。

交叉编译

1、接下来的内容参考了这篇文章https://rvarago.github.io/2020/10/02/crosscompiling-cpp-dockcross.html

2、⾸先,你需要从Docker Hub获取适合你的⽬标平台的Dockcross镜像。例如,如果你的⽬标平台是linux-arm64,你可以在命令行窗口使⽤以下命令获取镜像:

docker pull dockcross/linux-arm64

3、⽣成Dockcross脚本:Dockcross镜像不能直接运⾏,需要⽣成⼀个脚本来间接运⾏。你可以
使⽤以下命令⽣成脚本:

docker run --rm dockcross/linux-arm64 > dockcross-linux-arm64

然后,给⽣成的脚本添加执⾏权限:

chmod +x dockcross-linux-arm64

4.将生成的 dockcross-linux-arm64移动到你要编译的工作目录下如图:


5.现在,你可以使⽤⽣成的Dockcross脚本来进⾏交叉编译。假设你的源代码在 src ⽬录中,你可以使⽤以下命令进⾏交叉编译:

cmake -B[文件名]   这个-B是固定搭配

./dockcross-linux-arm64 cmake -Bbuild

./dockcross-linux-arm64 cmake --build build

        
ubuntu内使用cmake(clang)交叉编译android so库设置脚本: ANDROID_ABI是CPU架构,ANDROID_NDK是NDK的根目录,CMAKE_TOOLCHAIN_FILE是工具链文件,ANDROID_PLATFORM是支持的最低Android平台。ANDROID_ALLOW_UNDEFINED_SYMBOLS 指定CMake在构建原生库时,如果遇到未定义的引用,是否会引发未定义的符号错误。比如:这是一个编译的脚本------特别注意的是android studio自动生成的cmakelists.txt不用特别管。 阅读详情

相关推荐

ubantu交叉编译ffmpeg到arm

编译出来有.a文件和.so文件,这里为指定安装路径。–cross-prefix= 交叉编译工具链。–target-os= 编译器目标os。ffmpeg版本为6.0.–arch= 选择架构。

m0_47605113的博客 555

Ubuntu下VsCode+CMake 交叉编译

step1:Ctrl+Shift+p打开VSCode的指令面板,然后输入cmake:q;在窗口搜索:“ >CMake:Edit user-loacl CMake kits ”会打开一个cmake-tools-kits.json的文件.如果搜索不到这个文件,先把cmake :quick start 执行一遍再说。

卤煮小鱼的博客 1527

golang 线上事故

golang 线上事故 最近公司要做大促的一些活动。并且单量,qps持续上涨。之前使用的是django python 语言做的一个服务端。目前已经部署的国家里面最多的国家会有300+个实例。大促期间还可能会增加一个实例数。这么多的实例部署,回滚的时间都会特变长,除了问题也不好定位。并且如此多的一个机器,连接数* 实例数也会导致DB等其他服务扛不住这么大的并发。所以决定上go服务解决性能问题。 ...

lcf枫的博客 1537

DockCross项目实战:如何基于crosstool-ng添加新目标平台镜像

在跨平台开发领域,DockCross项目提供了一套完整的解决方案,它通过Docker容器封装了各种交叉编译工具链,使开发者能够轻松地为不同目标平台构建软件。本文将深入讲解如何在DockCross项目中添加一个新的目标平台镜像,以ARM64架构的Raspberry Pi 4为例,使用crosstool-ng工具链构建器。 ## 准备工作 ### crosstool-ng基础配置 crossto...

gitblog_01055的博客 516

SMR实战指南:从GWAS数据到eQTL分析的完整流程

本文提供了基于汇总数据的孟德尔随机化(SMR)实战指南,详细解析了如何从GWAS汇总数据出发,整合eQTL数据,完成从数据准备、BESD格式转换到最终SMR与HEIDI分析的完整流程。文章重点阐述了核心操作步骤、常见避坑技巧与结果解读,旨在帮助遗传学研究者高效掌握这一分析基因表达与复杂性状潜在因果关系的强大工具。

weixin_29246195的博客 1068

Matlab编码转换实战:从GBK到UTF-8的完整解决方案

本文提供Matlab编码转换的完整实战方案,重点解决GBK与UTF-8编码冲突导致的中文乱码问题。通过修改系统配置文件、批量转换项目文件及设置默认保存编码,实现从GBK到UTF-8的彻底迁移,并分享常见避坑指南与自动化脚本技巧,确保代码跨平台协作的稳定性。

weixin_29031057的博客 325

ubuntu c++使用cmake交叉编译

ubuntu下使用cmake交叉编译

qq_38082979的博客 1901

OASIS协议标准文档的解读_第一部分

OASIS标准协议的文档的解读。完整原协议的中文翻译和解读。

洋葱的专栏 4903

【CMake 入门与进阶(13)】 CMake如何设置交叉编译(附代码)

通过-DCMAKE_TOOLCHAIN_FILE 选项指定配置文件,-D 是 cmake 命令提供的一个选项,通过该选项可以创建一个缓存变量(缓存变量就是全局变量,在整个工程中都是生效的,会覆盖 CMakeLists.txt 源码中定义的同名变量 ),所以 -DCMAKE_TOOLCHAIN_FILE 其实就是设置了缓存变量 CMAKE_TOOLCHAIN_FILE,它的值就是“=”号后面的内容,cmake 会执行 CMAKE_TOOLCHAIN_FILE 变量所指定的源文件,对交叉编译进行设置;

cj_lsk的博客 1万+

YOLO26 数据标注工具:LabelImg、Label Studio实战指南:主流标注工具的安装配置与使用技巧,高效完成目标检测数据标注

本文介绍了目标检测中数据标注的核心地位与常用工具。数据标注质量直接影响模型性能,需要关注准确性、一致性等维度。文章详细讲解了边界框、类别标签等基本概念,并对比了LabelImg、Label Studio等主流标注工具的特点。重点介绍了LabelImg的轻量级、易用性等优势,以及Label Studio的协作功能,为不同规模项目提供标注工具选择建议。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1176

预编码算法(个人总结)

预编码算法是无线通信系统中的关键技术,通过在发送端对信号进行处理,可以有效减少干扰,提高系统性能。预编码算法在5G、Wi-Fi、卫星通信等领域具有广泛的应用前景,同时,随着深度学习、大规模MIMO和物理层安全等技术的发展,预编码算法的研究将进一步推动无线通信技术的发展。CSI的准确性直接影响到预编码的效果。预编码是一种在发送端对信号进行线性变换的技术,以优化信号的空间分布,使得接收端能够更好地接收和解码信号。预编码算法,特别是基于矩阵分解的预编码算法,计算复杂度较高,限制了其在实际系统中的应用。

年糕的博客 5288

Ubuntu 下搭建 GCC 交叉编译工具链

Ubuntu 下搭建 GCC 交叉编译工具链

安迪西_嵌入式攻城狮 6785

Spark中Application、Job、Stage和Task区别详解

在Spark中,有一些关键的概念,如Application、Job、Stage和Task,它们描述了Spark作业的不同层次和组成部分。下面我将详细介绍每个概念,并通过示例说明它们之间的区别。

优快云 精品推荐 903

x86架构利用docker去编译arm64的应用程序

但是,请注意,您可能需要在宿主机上配置 QEMU 或其他模拟器来实际运行在 x86 电脑上的 arm64 Docker 镜像。否则,您可能会遇到兼容性问题,因为您正在尝试在 x86 架构的宿主机上运行 arm64 代码。如果您在 x86 电脑上运行的 Docker 镜像已经是针对 arm64 架构的(例如,使用 FROM arm64v8/ubuntu 作为基础镜像),则您不需要配置交叉编译。在运行 arm64 Docker 镜像时,Docker 会自动设置 QEMU 来模拟 arm64 架构。

kintzhao 3172

VMware如何安装img镜像,VMware如何安装openwrt软路由(含相关工具镜像)

VMware如何安装img镜像,VMware如何安装openwrt软路由(含相关工具镜像)

XiaoqiangClub的博客 4007

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【初学推荐】ubuntu下安装交叉编译链

ubuntu安装交叉编译链 1.打开Ubuntu,在终端进入/usr/local/目录下 cp /usr/local/ 2.在local/目录下创建一个名为arm的文件夹 mkdir arm 3.在自己的共享文件夹下找到arm-2008q3.tar.bz2,并复制到之前创建的arm目录下 cp /mnt/hgfs/Myshare/arm-2008q3.tar.bz2 /usr/local/arm/ 4.进入到arm目录下,解压该其中文件 tar -jxvf arm-2009q3.tar

以放的博客 7745

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

armgcc交叉编译的文件无法运行_cmake:交叉编译

概念我们在 PC 上进行开发时,需要使用编译器和链接器生成能够在我们机器上运行的可执行程序。但是当涉及到嵌入式开发时,情况就不同了。因为嵌入式设备的资源(CPU、RAM等)无法和 PC 相比,在设备上构建编译系统很麻烦或者根本不可能构建。因此通常做法是在 PC 上使用交叉编译工具链生成能够在嵌入式设备运行的可执行程序,然后再将程序放到设备中去执行。此为交叉编译。一般称 PC 为 主机,嵌入式设备为...

weixin_39957265的博客 580

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

记录:Ubuntu 18.04 X86 上通过CMake 指定编译器工具链交叉编译。

可以在 CMakeFiles.txt 之中,手动写工具链的信息,但是我不建议,真心的,跨平台交叉编译,真心不推荐,除非你是真的没办法,但这种也应该写对应平台的编译 patch(补丁)。路径可以写全路径,但是一般不需要,因为正确安装的交叉编译器都在 /usr/bin、/usr/sbin 之中有软连接,你直接写交叉编译工具链的名字就可以了。要用 cmake 交叉编译,必须设置连接器,要不然会使用当前系统的 ld,就是 /usr/bin/ld。2、S390X编译(IBM大型机)4、MIPS64编译。

liulilittle的博客 1213

linux arm 运行 x86,ARM Linux可执行文件神秘地在x86_64上运行

我正在使用Docker容器( thewtex/cross-compiler-linux-armv7 )在Fedora 23 x86_64系统上交叉编译一个简单的“Hello World”Linux用户空间C程序。 目标系统是ARMv7embedded式系统(特别是带库存固件的Kobo Aura HD电子阅读器)。程序的源代码( hello_world.c )如下#include int main...

weixin_31856057的博客 2137

Ubuntu平台下cmake交叉编译环境的搭建

在嵌入式开发过程中,我们都需要进行交叉编译,程序经过交叉编译后才能在开发板上运行,如果是开源的项目一般都有configure文件,配置相关编译工具链接就可以生成makefile文件,然后进行make编译即可,但是自己从零开发的程序,没有makefile,如果要自己写makefile文件非常麻烦,不利于维护,尤其是代码文件比较多的时,那么有没有自动成生makefile文件进行交叉编译呢,本篇记录使用cmake生成makefile文件进行交叉编译。

chenyijun的专栏 925

交叉编译详解

交叉编译详解

qq_33934427的博客 682

Docker交叉编译环境搭建避坑指南:从入门到放弃再到自己动手

本文详细介绍了如何利用Docker搭建高效的交叉编译环境,解决现成方案如dockcross的兼容性问题。从基础镜像选择到多阶段构建,再到典型依赖库的交叉编译技巧,提供了一套完整的解决方案,帮助开发者节省80%的踩坑时间,特别适用于ARM设备编译和嵌入式系统构建。

weixin_29220405的博客 563

利用 Docker 构建跨平台交叉编译环境的实战指南

本文是一份实战指南,详细介绍了如何利用Docker构建稳定、可复现的跨平台交叉编译环境。文章针对嵌入式开发等场景,通过基于Debian构建全能型ARM64编译镜像的实例,解决了传统交叉编译环境搭建复杂、依赖管理困难的问题,并分享了处理复杂库依赖、集成CMake等构建系统以及优化镜像的最佳实践。

mac99的博客 1057

ubuntu 交叉编译 armv7_32 ffmpeg x264(已完成)

FFmpeg和X264的交叉编译环境 arm linux交叉编译x264 ffmpeg ffmpeg与x264差异? FFmpeg需要X264库才能正常编码x264,所以不知道我们arm摄像头里是否缺少x264库,所以我们先交叉编译个x264进去看看? 交叉编译x264 我可以参照我之前交叉编译netkit-ftp的方法 下载 x264:git clone VideoLAN / x264 拷贝到ubuntu虚拟机中,在里面运行configure --help查看make配置指令,发现出现/bin/bash^

Dontla的博客 4544

cmake与交叉编译(x86 to arm)过程和问题全记录

can’t find “/lib64/libharfbuzz.so” basic_ostringstream未定义的引用 libc.so 未定义的引用 listdc++.so可以直接通过替换动态库文件来升级版本;但是libc.so不能简单替换,由交叉编译工具的制作过程可知,gcc与glibc是强关联的。

qq_41104439的博客 3448

arm跨平台交叉编译tool:arm-linux-gcc之参数理解

arm-linux-gcc 是gcc编译器 ,在x86 linux平台上编译出运行在ARM平台上的代码 。 首先介绍下GCC编译器的工作过程,编译过程分为四个阶段: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking)   Linux程序员可以根据自己的需要让 GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为 今后的调试做好准备。和其它常用的

limanjihe的专栏 1959
上一篇: PX4差数小车(船) 无法倒退问题
下一篇: 华测坐标转换工具中的TGO水平平差法计算公式
Lelin_8013
博客等级 码龄6年 423粉丝 18原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值