cmake使用交叉编译工具链并验证

news2024/11/17 7:18:30

目录

一、内容

二、配置

1. 准备cmake文件

2. 使用交叉编译

三、验证

1. 构建阶段验证

2. 编译阶段验证


一、内容

目的:在X86环境下编译ARM平台软件

  • 编写交叉编译配置文件:xx.cmake

  • 执行cmake命令时指定:cmake \ -DCMAKE_TOOLCHAIN_FILE=“xx.cmake”

  • 编译:make -j8

  • 验证:make clear && make VERBOSE=1

二、配置

1. 准备cmake文件

(1)CMAKE官方例子

(2)自己项目例子

以配置一个nvidia orin的交叉编译工具链为例

编写cmake文件 gcc-ubuntu-9.3.0-2020.03-x86_64-aarch64-linux-gnu.cmake

# 常规配置
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR arm)

# 1. 添加gcc g++编译器目录
# maybe not work, you should export CC and CXX to real compile path
set(CMAKE_C_COMPILER "/l4t/toolchain/bin/aarch64-linux-gcc")
set(CMAKE_CXX_COMPILER "/l4t/toolchain/bin/aarch64-linux-g++")

# 2. 设置系统路径,即gcc的--sysroot参数
#   --sysroot=<directory>    Use <directory> as the root directory for headers
#                           and libraries.
# 这个目录下有arm平台的系统include目录以及系统lib目录
set(CMAKE_SYSROOT /l4t/toolchain/aarch64-linux-gnu/)

# 3. 设置额外的路径
# 例如除了系统库目录,还需要添加额外的目录
# 如果你只需要交叉编译环境的系统路径,就不需要这一步

# 3.1 可选:如果有必要,添加额外的头文件查找路径(例如libabc)
add_compile_options(-I/l4t/targetfs/usr/include/libabc)
add_compile_options(-I/l4t/targetfs/usr/include/libdrm)

# 3.2 可选:如果有必要,添加额外的库文件查找路径(例如libabc)
add_link_options(-L/opt/open_explorer/samples/abc/lib)
add_link_options(-L/opt/open_explorer/samples/drm/lib)

# 4. 可选:添加其他的CMake编译选项
# 实际上,这个文件可以添加任何CMake语法
# 但是,一般情况这个文件只用于配置必要的交叉编译器和交叉编译系统目录

2. 使用交叉编译

在使用cmake生成项目的时候

通过CMAKE的-DCMAKE_TOOLCHAIN_FILE指定交叉编译工具链的cmake文件

cmake \
  -DCMAKE_TOOLCHAIN_FILE="./cmake/gcc-ubuntu-9.3.0-2020.03-x86_64-aarch64-linux-gnu.cmake" \
  -DCMAKE_INSTALL_PREFIX="./output" \
  -DCMAKE_BUILD_TYPE=Release

三、验证

1. 构建阶段验证

构建开始时CMAKE会打印编译器版本信息

可以看到打印的编译器路径和我们设置的一致

2. 编译阶段验证

构建完成之后

我们使用make VERBOSE=1 打印详细的编译命令

make VERBOSE=1

可以看出打印出来的编译命令中可以设置的sysroot参数

同样也可以看到通过 add_compile_options 添加的 -L 和 add_link_options 添加的链接选项

非科班程序员,日拱一卒

一起学习,一起进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1700333.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是容器:从基础到进阶的全面介绍

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

【JavaEE初阶】HTTP协议|HTTP请求|URL基本格式|URLencode

&#x1f4a1;推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击跳转到网站】 HTTP请求(Request) 认识URL URL基本格式 平时我们俗称的"⽹址"其实就是说的URL(Uniform Resource Loc…

Linux内核重置root密码

Ubuntu 首先重新启动Ubuntu系统&#xff0c;然后快速按下shift键&#xff0c;以调出grub启动菜单在这里我们选择第二个&#xff08;Ubuntu高级选项&#xff09;&#xff0c;选中后按下Enter键 选择最高的Linux内核版本所对应的recovery mode模式&#xff0c;按e键编辑启动项 在…

【JavaEE初阶】网络初识|局域网和广域网|交换机和路由器|IP地址|端口号

&#x1f4a1;推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击跳转到网站】 关键概念 1.局域网LAN和广域网WAN &#xff08;1&#xff09;局域⽹&#xff0c;即Local Area Network&#xff0…

云界洞见——基于移动云云数据库MySQL应用实践

目录 简介1 新手入门1.1 创建MySQL实例1.2 公网连接MySQL实例 2 操作指南2.1 创建数据库2.2 数据备份设置2.3 日志管理2.4 监控告警2.5 代码审计 3 应用场景4 总结 如今&#xff0c;大型企业如金融企业和银行等&#xff0c;在下一代的微服务架构转型要求下&#xff0c;需要基础…

C++的数论相关算法

数论是数学的一个分支&#xff0c;主要研究整数的性质和关系。在计算机科学中&#xff0c;数论算法对于密码学、优化问题和算法分析等方面都具有重要作用。C作为一种高效的编程语言&#xff0c;非常适合用来实现这些算法。下面我们将介绍几个C中的数论相关算法&#xff0c;包括…

linux入门到精通-第十九章-libevent(开源高性能事件通知库)

目录 参考什么是libevent应用核心实现libevent的地基event_base等待事件产生&#xff0c;循环监听event_loop退出循环监听event_base_loopexit创建事件工作流程 安装一&#xff08;源码安装&#xff0c;推荐&#xff09;现在源码配置编译安装验证安装 安装二&#xff08;可能因…

【记忆空间】 史上最详细,移动固态硬盘,西数BLACK D30拆解,测评,外观与内饰解析。第一期:外观与内饰。

【记忆空间】 史上最详细&#xff0c;移动固态硬盘&#xff0c;西数BLACK D30拆解&#xff0c;测评&#xff0c;外观与内饰解析。第一期&#xff1a;外观与内饰。 外观实拍&#xff0c;正面&#xff0c;整体黑色&#xff0c;外壳是一个塑料的材质。 外观实拍&#xff1a;侧面…

Android Studio开发之路(十四)自定义Titlebar以及设置顶部状态栏颜色

一、描述 项目需求&#xff0c;我要做一个下图这样的titlebar,包括一个返回按钮&#xff0c;一个关闭按钮&#xff0c;一个文本框。默认的titlebar按钮设计不太满足我的需求&#xff0c;于是我打算自定义一个titlebar组件&#xff0c;应用到我的每一个页面 二、titlebar组件设…

新计划,不断变更!做自己,接受不美好!猪肝移植——早读(逆天打工人爬取热门微信文章解读)

时间不等人 引言Python 代码第一篇 做自己&#xff0c;没有很好也没关系第二篇结尾 引言 新计划&#xff1a; 早上一次性发几个视频不现实 所以更改一下 待后面有比较稳定的框架再优化 每天早上更新 早到8点 晚到10点 你刚刚好上班或者上课 然后偷瞄的看两眼 学习一下 补充知…

HCIP-Datacom-ARST自选题库__BGP判断【20道题】

1.传统的BGP-4只能管理IPV4单播路由信息&#xff0c;MP-BGP为了提供对多种网络层协议的支持&#xff0c;对BGP-4进行了扩展。其中MP-BGP对IPv6单播网络的支持特性称为BGP4&#xff0c;BGP4通过Next Hop属性携带路由下一跳地址信息。 2.BGP4通过Update报文中的Next Hop属性携带…

C++之运算符重载

在C中&#xff0c;运算符重载是一种特殊的函数&#xff0c;它允许程序员重新定义或重载大部分内置运算符&#xff0c;以便它们可以用于用户自定义的数据类型。通过运算符重载&#xff0c;可以使自定义类型的使用更加直观和自然。 不是所有运算符都可以被重载&#xff1a; .&a…

聊聊变异测试

软件质量保障 所寫即所思&#xff5c;一个阿里质量人对测试的所感所悟。 1. 介绍 有句话说&#xff1a;证实容易&#xff0c;证伪难。正如测试一样&#xff0c;证明缺陷存在容易&#xff0c;但证明不存在缺陷难。而变异测试颠覆了这一原则&#xff0c;如果我们知道存在缺陷&am…

ARM+FPGA+NVIDIA AI摄像头软硬件定制

拥有资深ISP图像技术团队&#xff0c;是英伟达、地平线等合作伙伴&#xff0c;我们的团队掌握目前市面上大部分车载平台的ISP图像画质服务能力&#xff0c;能自主开发图像ISP和增强算法。我们具有多名经验丰富光学设计专家&#xff0c;掌握车载模组光学设计能力&#xff0c;资深…

数据结构——链表——模板类实现双向链表——先完成再完美——持续更

链表&#xff1a;概念&#xff0c;实现&#xff0c;《数据结构》这里实现是基于模板的 C语言基础&#xff0c;指针&#xff0c;引用。模板。《CPrimer》有些进阶用法放在语言学习的目录 LeetCode应用&#xff0c;会更新在LeetCode150&#xff0c;目前这个系列先暂停&#xff0c…

遇见问题-VMware虚拟机打开运行一段时间后卡死

1.问题原因 因为Windows自带的虚拟化软件Hyper-V与VMware存在冲突。 2.关闭Hyper-V 1.打开【控制面板】-【程序和功能】-【启用或关闭Windows功能】3.关闭HV主机服务 1.右击计算机-》管理-》服务和应用名称-》服务-》找到HV主机服务-》右击属性停止服务 -》启动类型设置为禁…

NASA数据集——阿尔法喷气式大气实验二氧化碳和甲烷数据

Alpha Jet Atmospheric eXperiment Carbon Dioxide and Methane Data 阿尔法喷气式大气实验二氧化碳和甲烷数据 简介 Alpha Jet Atmospheric eXperiment (AJAX) 是美国国家航空航天局艾姆斯研究中心与 H211, L.L.C. 公司的合作项目&#xff0c;旨在促进对加利福尼亚、内华达…

asp.net core接入prometheus2-自定义指标

前提 了解一下asp.net core接入prometheus快速入门 https://blog.csdn.net/qq_36437991/article/details/139064138 新建.net 8空web项目 安装下面三个包 <PackageReference Include"OpenTelemetry.Exporter.Prometheus.AspNetCore" Version"1.8.0-rc.1&…

【软件设计师】计算机组成原理

1、数据的表示 1.1 进制转换 整型有4种进制形式&#xff1a; 1.十进制&#xff08;D&#xff09;&#xff1a; 都是以0-9这九个数字组成&#xff0c;不能以0开头。 2.二进制&#xff08;B&#xff09;&#xff1a; 由0和1两个数字组成。 3.八进制&#xff08;O&#xff09;&am…

Java的类路径究竟是什么?

回答 问了chatgpt这个问题&#xff0c;首先类路径的定义是&#xff1a; 是指一组路径&#xff0c;这些路径告诉Java虚拟机&#xff08;JVM&#xff09;和类加载器在哪里可以找到应用程序所需的类和资源文件。说白了就是在运行java程序的时候需要先将java源代码编译成class文件…