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)

大家都在看

  • 这里聊聊扫地机的 IOT 开发

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」 https://mp.weixin.qq.com/s/Xszi1YFxVqpJ7OcOt-lrqw 消费…

    Linux 2023年6月6日
    0115
  • 其他

    1、【剑指Offer学习】【面试题01:实现赋值运算符函数】 2、【剑指Offer学习】【面试题02:实现Singleton 模式——七种实现方式】 5、【剑指Offer学习】【面…

    Linux 2023年6月13日
    086
  • Docker配置LNMP环境

    目录规划 根目录下新建www目录,集中存放相关的配置文件和web文件 Mysql 从dockerhub拉取mysql镜像 $ docker pull mysql 实例化镜像,启动一…

    Linux 2023年6月13日
    0100
  • Redis中删除过期Key的三种策略

    转载自:http://blog.csdn.net/a_bang/article/details/52986935?locationNum=9&fps=1 项目中有个接口要频…

    Linux 2023年5月28日
    0115
  • Canal实时解析mysql binlog数据实战

    一、说明 通过canal实时监听mysql binlog日志文件的变化,并将数据解析出来 二、环境准备 1、创建maven项目并修改pom.xml配置文件 com.alibaba….

    Linux 2023年6月13日
    083
  • 设计模式在业务系统中的应用

    本文的重点在于说明工作中所使用的设计模式,为了能够更好的理解设计模式,首先简单介绍一下业务场景。使用设计模式,可以简化代码、提高扩展性、可维护性和复用性。有哪些设计模式,这里就不再…

    Linux 2023年6月8日
    0113
  • U盘如何安装centos7系统?U盘安装centos7详细安装图解教程

    一般来说,无论是Windows还是linux的IOS系统镜像,我们都可以使用UltraIOS(软碟通)这款软件制作U盘启动工具,不过考虑到不少小白依然不会如何操作,所以今天考虑写一…

    Linux 2023年6月8日
    0111
  • 初识MySQL数据库

    一 、引言 假设现在你已经是某大型互联网公司的高级程序员,让你写一个火车票购票系统,来hold住双十一期间全国的购票需求,你怎么写? 由于在同一时段抢票的人数太多,所以你的程序不可…

    Linux 2023年6月14日
    0127
  • redis cli命令

    redis安装后,在src和/usr/local/bin下有几个以redis开头的可执行文件,称为redis shell,这些可执行文件可做很多事情。 可执行文件 作用 redis…

    Linux 2023年5月28日
    084
  • redis 常用命令

    批量删除redis key redis-cli -a xxx keys “prefix_tb_supplier:spl_id*” | xargs redis…

    Linux 2023年5月28日
    099
  • [ Skill ] 如何获取库中的 top cell

    https://www.cnblogs.com/yeungchie/ top cell 的一个特点就是没有被其他的单元所调用,下面举例获取某个库中的 top cell。 1. 获取…

    Linux 2023年6月7日
    0106
  • 离线版centos8安装docker笔记

    嗨嗨哈哈,已经很久没有坐下来胡编乱造一点笔记了,平时云服务器搞惯了,一个命令就安装好了docker了的,但这次生不逢时的新机房就没那么幸运了,有多不逢时超乎想象,不仅仅服务器没有外…

    Linux 2023年5月27日
    0141
  • js中对象深度拷贝的方法(浅拷贝)

    JS中,一般的赋值传递的都是对象/数组的引用,并没有真正的深拷贝一个对象(浅拷贝),某些情况下需要用到深度拷贝,可以使用如下写法 let data = {username:&quo…

    Linux 2023年6月14日
    0107
  • 面试必问的安卓虚拟机,你真的掌握了么?——安卓虚拟机基础知识回顾

    前言 21世纪,安卓虚拟机正在一步步的走入我们的生活,小到个人部分朋友在电脑上使用安卓虚拟机玩手游,大到安卓从业人员在虚拟机上面跑程序。不得不承认,对于每一位Androider 而…

    Linux 2023年6月13日
    0104
  • 抓到 Netty 一个 Bug,顺带来透彻地聊一下 Netty 是如何高效接收网络连接的

    本系列Netty源码解析文章基于 4.1.56.Final版本,大家如果看到图片显示不了的话,可以查看公众号原文 对于一个高性能网络通讯框架来说,最最重要也是最核心的工作就是如何高…

    Linux 2023年6月6日
    0126
  • Ubuntu系统中MySQL安装后基本配置

    mysql8.0安装好后并不会让你输入root密码,而是采用默认账户+默认密码的方式保护数据库安全,但开发环境并不需要这样做。那么怎么找到这个默认账户和密码,又如何修改数据库使它可…

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