【君正T31開發記錄】12.編譯工具相關總結及介紹

移植交叉工具包的時候,發現這是很多工具的集合包;以及寫makefile的時候,也需要了解下這些工具的作用及用法,這里總結記錄一下常見的工具及相關用法。

  1. g++
    C++編譯器,用于編譯C++源代碼文件,這個很常見,不多介紹
  2. gcc
    C編譯器,用于編譯C源文件
  3. gdb
    調試器,命令行調試工具,用于調試C/C++程序
  4. ar
    用于創建、修改和提取歸檔文件的工具(指打包靜態庫)。歸檔文件(一般指靜態庫)通常包含多個目標文件,可以用ar將其打包成一個文件,如:
ar rcs lib.a file1.o file2.o
  1. ld ldd
    ld鏈接器,用于將目標文件和庫文件鏈接在一起,生成可執行文件或者庫文件;
    如:
ld -o a.out file1.o file2.o

ldd顯示可執行文件或者庫文件依賴的動態庫有哪些,防止因為動態庫拷貝少了導致的運行問題,但是這個不檢查動態庫版本之類的信息,需要自己小心。
在這里插入圖片描述
6. readelf elfedit
readelf讀elf信息,包括elf文件頭、程序頭、符號表、動態庫鏈接信息等;elfedit用來修改elf header信息,包括header顯示的版本、編譯平臺、執行平臺等
如:
在這里插入圖片描述

  1. execstack
    用于設置或者清除elf可執行文件的棧執行權限,這個在現代操作系統上一般沒有,因為現代操作系統上禁用棧執行權限。禁用棧執行權限可以避免棧溢出攻擊;現代操作系統的一般有棧保護機制,如棧金絲雀
  2. c++filt
    用于解碼符號名;編譯器會對函數名和變量名進行修飾,c++filt可以將修飾后的變量或者函數名還原成原本的名字;這個一般在gdb調試、或查看符號表的時候可以用。
    在這里插入圖片描述
  3. as
    匯編器,將匯編語言編譯成機器目標語言,編譯過程 預處理-編譯-匯編-鏈接過程中的匯編起始就是as實現的,單獨使用as:
 as -o output.o output.s
  1. addr2line
    將程序地址轉換成文件名和行號,比如linux上程序core dump掉以后,可以設置打印寄存器,pc寄存器一般就是當前執行的位置,根據這個地址,使用addr2line可以獲取到文件和行號,當然這要求程序的符號表還存在,沒有被strip掉
addr2line -e a.out 0x4005d6
  1. nm strip strings
    nm用于顯示目標文件、可執行文件或者庫文件中的符號表;strip用于從目標文件、可執行文件或者庫文件中去掉符號表、調試信息等;strings用于從二進制文件中提取字符串,一般是程序文本段的const字符、符號表等
    在這里插入圖片描述
  2. randlib
    用于生成靜態庫的索引表,便于連接器快速找到庫中的符號,按理說是可以加快使用靜態庫的時候的程序執行速度的。
ranlib lib.a
  1. gcov
    代碼覆蓋率分析工具,編譯的時候需要添加選項-fprofile-arcs -ftest-coverage -lgcov,這樣,在執行完程序以后,會生成代碼覆蓋率的文件,使用gcov對代碼覆蓋率生成報告文件
  2. gprof
    性能分析工具,編譯的時候需要添加 -pg選項,執行以后會生成.out文件,使用gprof對分析文件.out和可執行文件一起分析得到一個函數耗時和執行次數的統計預報文件
  3. cpp
    C文件的預處理器,展開#include #define等預處理信息
cpp main.c -o main.i
  1. objcopy objdump
    objcopy用于復制和轉換目標文件的格式,用來提取段信息、修改頭信息等;objdump用于顯示目標文件的詳細信息,包括反匯編代碼、符號表、節頭表等。

  2. prelink
    預鏈接共享庫,減少程序執行時間。將執行時的符號解析提前到鏈接階段,以減少程序運行時的動態鏈接開銷。

prelink a.out

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/65247.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65247.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65247.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何讓面向應急管理的多智能體具備自主決策能力

現代應急管理面對的是復雜、多變、跨部門的災害與事故場景——從自然災害(洪水、地震、臺風、火災)到公共安全事件(疫情、重大安全事故),都需要在極短時間內進行快速響應和全局協同。傳統的集中式指揮模式雖然有效&…

List-順序表--2

目錄 1、ArrayList 2、ArrayList構造方法 3、ArrayList常見方法 4、ArrayList的遍歷 5、ArrayList的擴容機制 6、ArrayList的具體使用 6.1、楊輝三角 6.2、簡單的洗牌算法 1、ArrayList 在集合框架中,ArrayList 是一個普通的類,實現了 List 接口…

lambda用法及其原理

目錄 lambda形式lambda用法1.sort降序2.swap3.捕捉列表 習題解題 lambda形式 [capture-list](parameters)->return type{function boby}[capture-list]:[捕捉列表]用于捕捉函數外的參數,可以為空,但不能省略;(parameters) &am…

基于ASP.NET的動漫網站

一、系統架構與技術實現 系統架構:基于ASP.NET的MVC框架構建,實現網站的層次結構,使得網站更加易于維護和擴展。 技術實現:利用ASP.NET的技術特點,如強大的后端開發能力、豐富的UI控件等,結合前端技術如HT…

用 HTML5 Canvas 和 JavaScript 實現流星雨特效

最近在研究前端動畫效果時,實現了一個超酷的流星雨特效,今天來和大家分享下具體實現過程。 1,整體實現思路 這個流星雨特效主要由 HTML、CSS 和 JavaScript 協同完成。HTML 搭建基礎結構,CSS 負責頁面樣式設計,JavaScript 實現星星和流星的動態效果。 效果展示: 用 HTM…

AI中的神經元與權重矩陣之間的關系;神經元連接角度看行和列的意義

AI中的神經元與權重矩陣之間的關系 目錄 AI中的神經元與權重矩陣之間的關系神經元連接角度看行和列的意義AI中的神經元概念 在人工智能領域,特別是神經網絡中,神經元是基本的計算單元,它是對生物神經元的一種抽象模擬。就像生物神經元接收來自其他神經元的電信號,經過處理后…

Visual studio code編寫簡單記事本exe筆記

安裝擴展cmake tools c/c c/c Extension pack CMakeLists.txt cmake_minimum_required(VERSION 3.20) project(NotepadApp)set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON)# Windows specific settings if(WIN32)set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)s…

Linux 35.6 + JetPack v5.1.4之編譯 pytorch升級

Linux 35.6 JetPack v5.1.4之編譯 pytorch升級 1. 源由2. 升級步驟1:獲取二進制版本步驟2:安裝二進制版本步驟3:獲取torchvision步驟4:安裝torchvision步驟5:檢查安裝版本 3. 使用4. 補充4.1 torchvision版本問題4.2 …

計算機網絡--根據IP地址和路由表計算下一跳

一、必備知識 1.無分類地址IPV4地址網絡前綴主機號 2.每個IPV4地址由32位二進制數組成 3. /15這個地址表示網絡前綴有15位,那么主機號32-1517位。 4.地址掩碼(子網掩碼):所對應的網絡前綴為1,主機號為0。 5.計算下…

歐幾里得算法(簡單理解版,非嚴格證明)

歐幾里得算法用于求解兩個整數的最大公約數,又稱為輾轉相除 依據的基本定理: GCD(a,b)GCD(a%b,b) 證明: 對于搞理論的人可能需要會嚴格證明,但是對于我們一般人而言,只要能理解其原理并記住即可,后者實際上…

插入式微型機頂盒來了

快科技1月6日消息,據國家廣播電視總局今日消息,國家廣播電視總局為首款以插入式微型機頂盒品類通過入網檢測的設備頒發了入網認定證書。 這是插入式微型機頂盒批量部署進程中的又一大進展。同時,廣播電視科學研究院依據行業標準建成了插入式…

lamda表達式

提示:文章 文章目錄 前言一、背景在使用lambda的時候,有幾個參數是可以直接省略的: 二、題目問題探究 總結 前言 前期疑問: 本文目標: lamda表達式 一、背景 看c科二的時候有看到lamda表達式,就再次看了…

XXL-RPC v1.8.1 | RPC服務框架

Release Notes 1、【安全】序列化安全性增強,默認開啟package安全空間機制;2、【擴展】序列化擴展性增強,支持自定義序列化package白名單;3、【優化】序列化類型主動檢測,提升問題定位效率;4、【能力】服務…

前端路由layout布局處理以及菜單交互(三)

上篇介紹了前端項目部署以及基本依賴的應用&#xff0c;這次主要對于路由以及布局進行模塊化處理 一、 創建layout模塊 1、新建src/layout/index.vue <template><el-container class"common-layout"><!-- <el-aside class"aside">&l…

Spring Boot(4)使用 IDEA 搭建 Spring Boot+MyBatis 項目全流程實戰

文章目錄 一、?搞個引言二、?開始搭建 Spring Boot 項目吧&#xff01;2.1 啟動 IDEA 并創建新項目2.2 選擇項目依賴2.3 完成項目創建 三、&#x1f4d8;項目結構剖析四、?配置數據庫連接五、? 創建 MyBatis 相關組件5.1 實體類&#xff08;Entity&#xff09;5.2 Mapper 接…

使用wujie搭建微前端應用及踩坑

線上演示地址&#xff1a;wujie-app 源碼地址&#xff1a;https://github.com/Jiang-K-J/micro-app?tabreadme-ov-file &#xff08;如果覺您得有用&#xff0c;請幫忙點個小星星&#xff09; 主應用&#xff1a;vue2webpack 子應用&#xff1a;vue3vite 子應用&#xff1…

【數據可視化-11】全國大學數據可視化分析

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

141.《mac m1安裝mongodb詳細教程》

文章目錄 下載從官網下載安裝包 下載后雙擊解壓出文件夾安裝文件名修改為 mongodb配置data存放位置和日志log的存放位置啟動方式一方式二方式二:輸入mongo報錯以及解決辦法 本人電腦 m2 pro,屬于 arm 架構 下載 官網地址: mongodb官網 怎么查看自己電腦應該下載哪個版本,輸入…

frameworks 之 Winscope 工具

frameworks 之 Winscope 工具 1. 手機端開啟2. 加載追蹤的文件2.1 Android12 3. 分析文件 Winscope 是一款 Web 工具&#xff0c;可以讓用戶在動畫和轉換期間和之后記錄、重放和分析多個系統服務的狀態。Winscope 將所有相關的系統服務狀態記錄在一個跟蹤文件中。使用帶有跟蹤文…