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

目录

一、内容

二、配置

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.mzph.cn/web/15794.shtml

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

相关文章

Linux Crontab:看完这篇,还有啥不懂的吗

在Linux系统管理中&#xff0c;自动化是一个至关重要的概念&#xff0c;它可以帮助我们节省时间、减少错误并提高效率。crontab> 是实现这一目标的强大工具&#xff0c;它允许我们安排任务在特定的时间自动执行。本文将详细介绍 crontab 的基础概念、语法、命令、高级技巧以…

K8S认证|CKA题库+答案| 12. 查看Pod日志

目录 12、查看Pod日志 CKA v1.29.0模拟系统免费下载试用&#xff1a; 题目&#xff1a; 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、提取错误日志 3&#xff09;、验证提取结果 12、查看Pod日志 CKA v1.29.0模拟系统免费下载试用&#xff1a; 百度…

简单的UDP网络程序:多人群聊系统

本章重点 能够实现一个简单的udp客户端/服务器; 1.创建套接字 我们把服务器封装成一个类&#xff0c;当我们定义出一个服务器对象后需要马上初始化服务器&#xff0c;而初始化服务器需要做的第一件事就是创建套接字。 ⭐参数说明&#xff1a; domain&#xff1a;创建套接字的域…

Nginx代理配置(专业版)

写在前面提醒&#xff1a;使用代理&#xff0c;如果可以&#xff0c;请尽量支持双协议&#xff0c;http、https均要支持哈。 注意&#xff1a;监控系统只是运行代码&#xff0c;是否支持https&#xff0c;需要运维同学在你们的服务器上配置https证书&#xff0c;配置好证书&…

在 CentOS 上安装 PostgreSQL 的全面指南

PostgreSQL 是一种功能强大的开源关系型数据库管理系统&#xff0c;广泛应用于各种领域。它提供了诸如事务处理、并发控制和数据完整性等高级功能&#xff0c;因此深受开发者和企业的欢迎。本指南将逐步引导您在 CentOS 上安装 PostgreSQL&#xff0c;以便您充分利用其众多优势…

决定了,将ChatGPTer开源!主打一个大模型人人可用。

一个快速上手且极易部署的类ChatGPT开源应用&#xff0c;可接入 OPENAI API 或 通义千问API 开源地址&#xff1a; https://github.com/isnl/EsChat 大声(偷偷)告诉你&#xff1a;通义千问有免费API额度可白嫖&#xff01;&#xff01;&#xff01; 版本特性 OPENAI 和 通义千…

点云AABB、OBB包围盒计算显示

目录 一、简介 1)AABB包围盒 2)OBB包围盒 二、计算代码 三、加载计算结果

什么是Promise

Promise 是 JavaScript 中的一个对象&#xff0c;用于处理异步操作。它代表了一个最终可能完成&#xff08;也可能被拒绝&#xff09;的异步操作及其结果值。Promise 对象用于更复杂的异步编程模式&#xff0c;包括使用 .then() 和 .catch() 链式调用来处理异步操作的结果。 P…

算法提高之区间最大公约数

算法提高之区间最大公约数 核心思想&#xff1a;线段树 1.在区间上加一个数 差分 2.求一段区间的最gcd 求[l,r]的gcd 可以拆解为求**[1,l].sum(差分数组 求出来时l点的值)和[l1,r]**做gcd #include <iostream>#include <cstring>#include <algorithm>usi…

1738. 找出第 K 大的异或坐标值

1738. 找出第 K 大的异或坐标值 题目链接&#xff1a;1738. 找出第 K 大的异或坐标值 代码如下&#xff1a; //列前缀异或和 //参考链接:https://leetcode.cn/problems/find-kth-largest-xor-coordinate-value/solutions/2790359/liang-chong-fang-fa-er-wei-qian-zhui-yi-68…

Docker数据卷(volume)

数据卷 数据卷是一个虚拟目录&#xff0c;是容器内目录与宿主机目录之间映射的桥梁。&#xff08;容器内目录与宿主机目录对应的桥梁&#xff0c;修改宿主机对应的目录&#xff0c;docker会映射到容器内部&#xff0c;相当于修改了容器内的&#xff0c;反之也一样&#xff09;数…

利用英特尔 Gaudi 2 和至强 CPU 构建经济高效的企业级 RAG 应用

检索增强生成 (Retrieval Augmented Generation&#xff0c;RAG) 可将存储在外部数据库中的新鲜领域知识纳入大语言模型以增强其文本生成能力。其提供了一种将公司数据与训练期间语言模型学到的知识分开的方式&#xff0c;有助于我们在性能、准确性及安全隐私之间进行有效折衷。…

任推邦:实力强劲的APP推广拉新平台,号称不扣量

任推邦简介 任推邦是国内数一数二的项目分发平台&#xff0c;也是一个不扣量的项目APP推广拉新平台&#xff0c;隶属于聚名科技集团股份有限公司。聚名科技成立时间在2012年&#xff0c;是安徽省老牌互联网企业&#xff0c;历经11年的飞速发展&#xff0c;聚名科技成功布局打造…

小程序的这些知识你知道吗?

一:导航传参 无论是编程式还是声明式导肮传参都是在url?keyvalue&key1value1,无论是否是tabbar页面. 对于回退页面,没办法传参. 这个参数是,跳转到页面的时候,跳转到另一个页面,这个页面就是刚开始执行,等数据执行之后,触发onload,传递的参数放在内存中,跳转是内部底层触…

云端力量:利用移动云服务器高效部署Spring Boot Web应用

文章目录 一、移动云介绍二、移动云产品选择三、体验云主机ECS四、使用移动云服务器部署SpringBoot Web应用4.1移动云ECS安装JDK4.2移动云ECS安装MySQL4.3移动云ECS数据库插入数据4.4移动云ECS部署Spring Boot Web应用 总结 一、移动云介绍 移动云是中国移动基于自研的先进技术…

Linux中常见的基本指令(上)

目录 一、ls指令 1. ls 2. ls -l 3. ls -a 4.ls -F 二、qwd指令 三、cd指令 1. cd .. 2. cd / / / 3. cd ../ / / 4. cd ~ 5. cd - 五、mkdir指令 六、rmdir指令和rm指令 一、ls指令 语法 &#xff1a; ls [ 选项 ][ 目录或文件 ] 。 功能 &#xff1a;对于目录…

桶排序和基数排序

前言&#xff1a; 这篇文章&#xff0c;我们就来了解一些鲜为人知的排序&#xff0c;桶排序和基数排序。 桶排序&#xff1a; 桶排序的思想&#xff1a; 桶排序的思想就是把待排序的数尽量均匀地放到各个桶中&#xff0c;再对各个桶进行局部的排序&#xff0c;最后再按序将各…

AI Agent: Agent框架+7个实例

何谓Agent Agent 作为一种新兴的人工智能技术&#xff0c;正在受到越来越多的关注。要说清楚什么是 Agent&#xff0c;先得看看人工智能的本质是什么。 人工智能这个名称来自它试图通过计算机程序或机器来模拟、扩展和增强人类智能的 一些方面。在这个定义中&#xff0c;“人…

C# WPF入门学习(四)—— 按钮控件

上期介绍了WPF的实现架构和原理&#xff0c;之后我们开始来使用WPF来学习各种控件。 一、尝试插入一个按钮&#xff08;方法一&#xff09; 1. VS2019 在界面中&#xff0c;点击工具栏中的视图&#xff0c;在下拉菜单中选择工具箱。 至于编译器中的视图怎么舒服怎么来布置&am…

Cocos Creator 帧动画播放组件制作详解

Cocos Creator 是一个强大的游戏开发工具&#xff0c;提供了丰富的功能和组件&#xff0c;其中帧动画播放组件是游戏开发中常用的组件之一&#xff0c;通过帧动画播放组件可以实现角色动画、特效动画等效果。本文将详细介绍如何使用 Cocos Creator 制作帧动画播放组件&#xff…