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.pswp.cn/web/15794.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15794.shtml
英文地址,請注明出處:http://en.pswp.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…