首页 > 其他分享 >第1、2章学习笔记

第1、2章学习笔记

时间:2023-09-10 18:12:00浏览次数:43  
标签:可执行文件 笔记 C语言 学习 编译 GDB Linux 链接

教材第一、二章读书笔记

主要内容

  • 第一章
    主要学习了Unix的历史、开发及其各种发行版,列出了适用于Linux的各种硬件平台和虚拟机,揭示了常用的命令和文件系统组织、文件类型。
  • 第二章
    主要学习了基于GUI的编辑器,展示了如何在命令和GUI模式下使用EMACS编辑器来边集、编译和执行C语言程序,阐述了程序开发的步骤,阐阐释了函数调用惯例和运行时堆栈的使用,展示了C语言程序与汇编代码的链接,并举例说明如何编写makefile。

知识点归纳

  • 文字编辑器
    • vim(三种操作模式)
    • gedit
    • emacs
  • 程序开发
    • 开发步骤
      • 创建源文件(变量的分类)
      • 用gcc把源文件转换成二进制可执行文件
    • 静态和动态链接
    • a.out文件内容
    • 程序执行过程:读取文件头>sh从总大小中分配一个内存区给执行映像>sh放弃旧映像
  • C语言函数调用
  • C语言程序和汇编代码的链接
  • 链接库
  • makefile
  • GDB调试工具
  • C语言相关知识:结构体、链表处理、树、二叉树
  • Unix/Linux文件系统树编辑器

问题解决

  • 静态库和动态库的区别

静态库在编译时被链接到可执行文件中,因此可执行文件包含了库的全部代码和数据,使得可执行文件较大。而动态库在运行时被加载到内存中,多个可执行文件可以共享同一个动态库,减少了可执行文件的大小。静态库的使用简单,只需要将库文件链接到可执行文件中即可。而动态库需要在运行时加载,需要操作系统提供动态链接器进行加载和链接。静态库的更新需要重新编译和链接可执行文件,而动态库的更新只需要替换库文件即可。

-- 引用自chatgpt

  • 在学习GCC、GDB、Makefile后,我对于这三种工具和文本编辑器的关系和工作顺序还不太了解,通过gpt我得到了答案。

在项目生成过程中,通常的使用顺序是首先使用Vim编辑源代码文件和配置文件,然后使用GCC编译源代码生成可执行文件,接着使用GDB进行调试和错误修复,最后使用Makefile来自动化编译和构建整个项目。这样的使用顺序和作用可以帮助你完成项目的开发、调试和构建工作。

-- 引用自chatgpt

  • gcc-g相当于gcc-E-S-c吗?

不完全相同。命令 "gcc -g" 是用于在编译过程中生成调试信息的选项,而命令 "gcc -E -S -c" 是将源代码文件进行预处理、汇编和编译的选项组合。
具体来说:
"-E" 选项表示只进行预处理,将宏展开并生成预处理后的代码。
"-S" 选项表示只进行汇编,将预处理后的代码转换为汇编代码。
"-c" 选项表示只进行编译,将汇编代码转换为目标文件,不进行链接。
而 "-g" 选项是用于在编译过程中生成调试信息,包括源代码的行号、变量的值等,以便在调试过程中进行源代码级别的调试。
因此,虽然两个选项都与编译过程有关,但其功能和作用是不同的。

-- 引用自chatgpt

苏格拉底挑战

知识点1:vim




知识点2:GCC、GDB




个人收获

  • 学习了Linux编程的基础工具:GCC、GDB、MAKEFILE
    在学习相关内容之前,我只在C语言程序设计和数据结构学习过C语言的编辑,而通过学习我了解到GCC的编译分为四个步骤——编译预处理,编译,汇编,链接;GDB则是在编译后进行程序的调试;而makefile管理代码的编译,决定编译顺序和是否需要重新编译,如果文件有更改,只需要重新编译此文件而不需要重新编译整个工程。
  • 学习了Unix/Linux文件系统树模拟器
    教材通过C语言程序实现了Uinx/Linux文件系统模拟器,使我们更易于理解Linux的文件结构。
  • 这是我使用chatgpt频率最高的一周,但我仍需探究如何将向gpt获取答案的过程转化为汲取思路的过程。

标签:可执行文件,笔记,C语言,学习,编译,GDB,Linux,链接
From: https://www.cnblogs.com/yogahuu/p/17680133.html

相关文章

  • 学习笔记1
    1.知识点归纳①Ubuntu②如何安装虚拟机③如何下载VMwareWorkstation④Unix/Linux命令2.问题与解决过程......
  • 经典接雨水-刷题笔记
    leetcode42按行求(测试用例通过,但超时)classSolution{publicinttrap(int[]height){intres=0;intn=height.length;intmaxh=0;for(inti=0;i<n;i++){maxh=Math.max(maxh,height[i]);}for(intr......
  • 20211421《信息安全系统设计与实现》第一周学习笔记
    知识点总结第一章关于本书研究Unix/Linux系统编程的专著,涵盖Unix/Linux的所有基本组件,包括进程管理、并发编程、定时器和时钟服务、文件系统、网络编程和MySQL数据库系统。本书目标强化学生编程背景知识动态数据结构的应用进程概念和进程管理并发编程定时器和定时功能......
  • 机器学习算法原理实现——cart决策树
      cart决策树示例: 本文目标,仿照sklearn写一个cart树,但是仅仅使用max_depth作为剪枝依据。   我们本次实现cart分类,因此用到gini指数: 为了帮助理解:  好了,理解了基尼指数。我们看下cart树的构建步骤:注意还有几个细节: cart树每个treenode存储......
  • 学习笔记1
    ChatGpt的苏格拉底挑战:有关内核:linux系统的核心是内核。内核控制着计算机系统的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。内核主要负责以下4种功能。·系统内存管理·软件程序管理·硬件设备管理·文件系统管理  有关GCC:GNUCompilerCollection,编译器集合......
  • Node.js+Express+Koa2开发接口学习笔记(二)
    搭建开发环境从0开始搭建,不适用任何框架使用nodemon监测文件变化,自动重启node使用cross-env设置环境变量,兼容maxlinux和windows创建项目文件夹blog-1,在终端输入命令npminit-y在根目录下创建bin=>www.js文件,将初次运行的文件www.js存放在bin目录下。同时需要修改pack......
  • 20211314王艺达信息安全系统设计与实现学习笔记(1)
    作业要求链接https://www.mosoteach.cn/web/index.php?c=interaction_homework&m=s_write&clazz_course_id=97072AE7-2C45-11EE-8539-1C34DA7B3F7C&id=F3080EAA-E3B7-414E-B311-938F0B8988F0&order_item=group&status=IN_PRGRS第一章学习总结及自测知识点归纳什么是Unix/Linux......
  • 【学习笔记】折半搜索 Meet In The Middle
    点击查看目录目录算法实现杂题乱写[CEOI2015Day2]世界冰球锦标赛题单oi-wiki算法实现我们正常的搜索应该是一个指数级的:\(2^n\)。然而我们可以把这个搜索拆成两半,设小于整张图的限制\(limit\)为合法:对于上半搜索,我们有若干符合限制的答案\(sum_1\),对于下半搜索,我......
  • swift5笔记(五):字典
    swift5笔记(五):字典Harry__Li关注IP属地:陕西2022.10.3115:48:06字数31阅读176初始化swift中需要指出字典中的类型//初始化字典varmdict:[String:Any]=[:]varmdict1=[String:Any]()letdict:[String:Any]=["name":"lhr","age":"100"]增加......
  • Java基础学习——字符串
    目录1String概述 2String构造方法代码实现和内存分析2.1创建方式2.2内存区1.StringTable(串池)2.直接赋值创建字符串方式内存图3.通过new创建字符串方式内存图 3字符串比较3.1“==”号比较的内容    1String概述总结:1.String是Java定义好......