【君正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.mzph.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 将所有相关的系统服务状态记录在一个跟踪文件中。使用带有跟踪文…