【君正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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Appium(一)--- 环境搭建

一、Android自动化环境搭建 1、JDK 必须1.8及以上(1) 安装:默认安装(2) 环境变量配置新建JAVA_HOME:安装路径新建CLASSPath%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar在path中增加:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;(3) 验证…

猫的眼睛有几种颜色?

在猫咪神秘而迷人的世界里,它们的眼睛犹如璀璨星辰,闪烁着各异的光芒,颜色丰富多样,令人着迷。 猫眼睛的颜色,粗略一数,常见的便有黄色、蓝色、绿色、棕色,还有那神秘的异瞳。这些色彩并非无端生…

PHP框架+gatewayworker实现在线1对1聊天--接收消息(7)

文章目录 接收消息的原理接收消息JavaScript代码 接收消息的原理 接收消息,就是接受服务器转发的客户端消息。并不需要单独创建函数,因为 ws.onmessage会自动接收消息。我们需要在这个函数里进行处理。因为初始化的时候,已经处理的init类型的…

校园周边美食探索及分享平台的设计与实现(源码+数据库+文档)

亲测完美运行带论文:文末获取源码 文章目录 项目简介(论文摘要)运行视频包含的文件列表(含论文)前台运行截图后台运行截图 项目简介(论文摘要) : 美食一直是与人们日常生活息息相关…

基于深度学习的视觉检测小项目(七) 开始组态界面

开始设计和组态画面。 • 关于背景和配色 在组态画面之前,先要确定好画面的风格和色系。如果有前端经验和美术功底,可以建立自己的配色体系。像我这种工科男,就只能从网络上下载一些别人做好的优秀界面,然后在photo shop中抠取色…

wps版excel中如何快速生成倒序序号?

使用wps办公软件打开的excel文件: 效果如下: 方法: 如:想生成此列序号从101~13序号,倒序排列。 在第1个格子中输入开头的最小数字:13 点击一下【13】这个单元格,然后鼠标放在右下角&#xff…

jupyter出现“.ipynb appears to have died. It will restart automatically.”解决方法

原因 解决方法:更新jupyter的版本 1.打开anaconda prompt 2、更新jupyter版本 在anaconda prompt输入以下指令 conda update jupyter如图:

【Flink CDC】Flink CDC的Schema Evolution表结构演变的源码分析和流程图

Flink CDC版本:3.2.1 说明:本文从SchemaOperator接收到,表结构变更事件开始,表结构变更事件应由source端产生,本文不讨论。 可以先看流程图,研究源码。 参考文章: Flink cdc3.0动态变更表结构—…

【编译原理与技术(李文生第二版)】期末复习

第五章 语法制导定义第五章 设计翻译方案√第六章 语义分析-类型表达式(仅记录,没说考)第七章 参数传递 √第七章 运行栈、display表 √例题1:来源:课件例题2:来源:教材7.4例题3:来源…

SpringBoot环境和Maven配置

SpringBoot环境和Maven配置 1. 环境准备2. Maven2.1 什么是Maven2.2 为什么要学 Maven2.3 创建一个 Maven项目2.4 Maven核心功能2.4.1 项目构建2.4.2 依赖管理2.4.3 Maven Help插件 2.5 Maven 仓库2.5.1本地仓库2.5.2 中央仓库2.5.3 私有服务器, 也称为私服 2.6 Maven设置国内源…

五个不同类型的数据库安装

一、 官方首页下载 打开 MySQL 官方首页,链接为: MySQL 进去社区后选择合适的版本进行安装 安装细节 依图一路next 点击finish结束安装 二、 在线YUM仓库 将该安装包的下载链接在 Linux 操作系统中按照以下命令直接进行下载 三、 二进制本地 通过该链接…

决定系数(R²分数)——评估回归模型性能的一个指标

目录 1.定义 2.计算举例 3. 结果分析 1.定义 R(R平方)分数,也称为决定系数,是用来评估回归模型性能的一个指标。它表示自变量解释因变量变异性的比例。R分数的取值范围通常在0到1之间,其值越接近1,说明…

基于单片机的直流稳压电源的设计(论文+源码)

1.系统方案设计 在本次直流稳压电源的设计中,其关键指标如下: 系统输入电压220V交流系统输出直流0到12V可调,步进可以达到0.1V电流最大输出可以到2A具有短路保护功能可以通过液晶或者数码管等显示设备显示当前输出电压 2. 电路图

排序算法——堆排序

什么是堆 堆就是一种特殊的二叉树,他有以下特点: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。 堆又可以分为大根堆和小根堆 大根堆:根节点最大,每个节点都小于或等于父节点 小跟堆&am…

数据挖掘——聚类

数据挖掘——聚类 聚类K-meansKNN VS K-meansK-Nearest Neighbors (KNN)K-means K中心算法PAM算法 K-modes算法——解决数据敏感的问题KMeans算法 ——解决初始点选择问题K-中心点层次方法AGNES算法——最小距离单链接全链接平均链接 聚类评估K均值和K中心点的优缺点层次化聚类…

在线机考|2024华为实习秋招春招编程题(最新)——第3题_个性化歌单推荐系统_300分(十一)

题目内容 假设你是音乐服务的开发者,为了提高用户体验需要解决推荐歌单的同质化问题,保证推荐给用户的所有歌单不包含相同歌曲的。给定一个包含N个歌单和M条歌单重复记录,每个歌单用一个从1到N的整数编号,歌单重复记录包含两个歌单的ID,表示两个歌单有相同的歌曲。 你的任…

每日OJ_牛客_宵暗的妖怪_DP_C++_Java

目录 牛客_宵暗的妖怪_DP 题目解析 C代码 Java代码 牛客_宵暗的妖怪_DP 宵暗的妖怪 描述: 露米娅作为宵暗的妖怪,非常喜欢吞噬黑暗。这天,她来到了一条路上,准备吞噬这条路上的黑暗。这条道路一共被分为n 部分&…

开源架构的自动化测试策略优化版

最近四篇文章推荐: 开源架构的容器化部署优化版(New) 开源架构的微服务架构实践优化版(New) 开源架构中的数据库选择优化版(New) 开源架构学习指南:文档与资源的智慧锦囊&#xff08…

2. 进程和线程

文章目录 前言1. 进程是什么2. 进程的相关属性3. 线程是什么4. 为什么引入线程5. 进程和线程的区别 前言 上一篇博客,我们讲到了CPU和操作系统,今天我们讲一个操作系统中一个非常重要的概念—线程和进程 1. 进程是什么 每个应用程序运行于现代操作系统…

三甲医院等级评审八维数据分析应用(八)--数据治理的持续改进与反馈机制篇

一、引言 1.1 研究背景与意义 当前三甲医院在数据管理方面暴露出诸多棘手问题。一方面,数据治理缺乏系统性与规范性,数据标准不统一,不同科室、信息系统之间的数据格式各异、编码混乱,导致数据整合与共享困难重重,严重制约了数据分析的准确性与深度。以某三甲医院为例,…