gcc/g++与动静库以及gdb

gcc/g++

程序转换为二进制 总共需要经过4个大步骤:1.预处理,2.编译,3.汇编,4.链接。

想要更深刻的了解它,可以通过Linux去深刻的了解他们。

gcc/g++与动静库以及gdb

先创建.C文件 并且能够通运行

gcc/g++与动静库以及gdb
gcc -E mytest.c -o mytest.e

gcc/g++与动静库以及gdb

此命令为 将源文件只进行到预处理阶段,完成后放到目标文件内(mytest.e)

gcc -S mytest.c -o mytest.s

gcc/g++与动静库以及gdb

此命令为 将源文件只进行到编译阶段,完成后放到目标文件内(mytest.s)

gcc -c mytest.c -o mytest.o

gcc/g++与动静库以及gdb

此命令为 将源文件只进行到汇编阶段,完成后放到目标文件内(mytest.o)

总和为 ESc

然后进入mytest.c内

进入底行模式(shift+:)输入 vs 文件名

可以输入 刚才的 预处理 编译 汇编 的三个阶段文件

1 vs mytest.e
2
3 vs mytest.s
4
5 vs mytest.c

gcc/g++与动静库以及gdb

这里只看预处理阶段,可以看出预处理阶段 是把头文件展开 再替换宏,注释去掉 可以简称为 干净的代码

ctrl+ww 可以切换光标页面

动静库/链接

动态库 Linux(.so) window(.dll)

静态库Linux(.a) window (.lib)

动态链接

去对应的库中,执行代码

优点:大家共享一个库,节省资源

缺点:一旦库缺失,会导致几乎所有的程序失效

静态链接

将库中相关代码,拷贝到自己可执行程序中

优点:不依赖任何库,程序可以独立执行

缺点:浪费资源

默认情况下,生成可执行程序,就是动态链接

gcc/g++与动静库以及gdb

动态链接大小为 8409

而静态库通常比动态库大很多

所以推荐用动态链接

c的静态库下载

sudo yum install -y glibc-static

c++的静态库下载

sudo yum install -y libstdc++-static

因为这条命令是需要提高权限的,如果是普通用户需要与root用户是信任关系才可使用,如果是root用户,删除sudo 即可使用。

gdb调试器

Linux下默认是release(不可调试)

可在最后加上-g转为debug模式

gcc/g++与动静库以及gdb

调试为 gdb 文件名

逐语句 s 逐过程 n
l n 显示n行
b n 在n行打断点
info b 显示所有断点
d 序号 删除对应序号的断点
r 查看断点
p n 查看n的值
display n 长显示n的值 (不支持一行多添加)
undisplay 序号 删除对应序号的长显示
until n 跳转第到n行
c 让第一个断点跳转到下一个断点
finish 执行完一个函数就停下来

make/makefile

make是一个命名 makefile是一个文件

只要使用make 就要创建Makefile

先创建好一个可以正常运行的源文件,和Makefile

gcc/g++与动静库以及gdb

gcc前面的空格为TAB

mytest:mytest.c //左依赖右
    gcc mytest.c -o mytest

保存退出后

输入 make 可以直接生成可执行文件

gcc/g++与动静库以及gdb

保存退出后 输入make clean 即可删除对应文件

这两个命令 都写在同一个Makefile文件下

这就是本篇的全部内容,若过对您有帮助,希望能获得您的赞!您的赞就是对我的最大的支持!

Original: https://www.cnblogs.com/LonelyMoNan/p/16521061.html
Author: lemon-Breeze
Title: gcc/g++与动静库以及gdb

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/606580/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【vue 引入cdn加载失败 解决办法】

    在项目index.html中放上 生产环境下自动加载 src下可以把文件放到自己服务器,本地加载 Original: https://www.cnblogs.com/Slience…

    Linux 2023年6月8日
    0107
  • Redis的快照持久化-RDB与AOF

    Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。 数据保存到硬盘的过程就称为&#822…

    Linux 2023年5月28日
    0100
  • Redis Sentinel实现的机制与原理详解

    Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案。实际上这意味着你可以使用Sentinel模式创建一个可以不用人为干预而应对各种故障的Redis部署。 它…

    Linux 2023年5月28日
    0118
  • 数据库的灾备

    数据是企业重要的生产资料,关键数据的丢失可能会给企业致命一击,因为数据是计算机系统存在的原因和基础。数据往往是不可再生的,一旦发生数据丢失,企业就会陷入困境:客户资料、技术文件、财…

    Linux 2023年6月6日
    0108
  • windows下安装virtualenv并且配置指定环境

    下面是在windows下通过virtualenv创建虚拟环境, 包括 : 安装virtualenv(使用pip可直接安装) 使用virtualenv创建指定版本的虚拟环境 进入虚拟…

    Linux 2023年6月6日
    0101
  • MariaDB 安装和配置

    一、MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。 1、关闭selinux ①修改selinux的配置文件 [root@localh…

    Linux 2023年6月7日
    099
  • 【转】高并发下秒杀商品,你必须知道的9个细节

    0.前言 高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。 秒杀一般出现在商城的促销活动中,指定…

    Linux 2023年6月13日
    083
  • exec

    exec 函数 exec()函数通过运行其他程序来替换当前进程。 新程序启动后PID和老程序一样,就像两个程序接力跑,你的程序把进程交接给了新程序。 exec函数众多,可以分为两种…

    Linux 2023年6月7日
    0100
  • Linux文件查找命令find与三剑客之grep

    一、find 根据文件的名称或者属性查找文件。 语法格式: find [查找范围] [参数] 参数: -name : 按照文件的名字查找文件 * :通配符 -iname : 按照文…

    Linux 2023年5月27日
    0159
  • 基于 vite 创建 vue3 全家桶项目(vite + vue3 + tsx + pinia)

    vite 最近非常火,它是 vue 作者尤大神发布前端构建工具,底层基于 Rollup,无论是启动速度还是热加载速度都非常快。vite 随 vue3 正式版一起发布,刚开始的时候与…

    Linux 2023年6月7日
    096
  • Spring 4 集成 redis 实现缓存 二

    项目开发过程中经常用到mybatis,为了提升查询效率,mybatis支持一级和二级缓存,一级缓存基于SqlSession级别,默认开启,二级缓存基于Mapper级别;一级和二级缓…

    Linux 2023年6月14日
    096
  • Fabric2.2中的Raft共识模块源码分析

    引言 Hyperledger Fabric是当前比较流行的一种联盟链系统,它隶属于Linux基金会在2015年创建的超级账本项目且是这个项目最重要的一个子项目。目前,与Hyperl…

    Linux 2023年6月7日
    076
  • Flask 易错点

    1.With上下文管理器 常用: with open("file_name","wb") as f: f.write("hello…

    Linux 2023年6月8日
    085
  • linux正则表达式初探

    为什么要学习正则表达式? 简单而言,仅仅用通配符无法满足处理字符的需求,这时候就是正则表达式大展身手的机会。相较而言,正则表达式比通配符更灵活,也更强大。 我们在网站注册用户的时候…

    Linux 2023年6月7日
    080
  • SpringBoot-Redis

    SpringBoot 整合 Redis SpringBoot-Redis 15.1 导入相关依赖 org.springframework.boot spring-boot-star…

    Linux 2023年6月14日
    093
  • 自动化集成:Pipeline整合Docker+K8S

    前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译、打包、镜像构建、部署等操作; 本篇文章主要描述流水线集成K8S用法。 一、背景…

    Linux 2023年5月27日
    0167
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球