ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2022-2023-1 20201324《信息安全系统设计与实现(上)》第2章

2022-09-04 23:01:27  阅读:255  来源: 互联网

标签:文件 gcc 静态 vim 2022 2023 20201324 链接 out


第2章 编程背景

目录

1 Linux中的文本编辑器

vim

①简介

vim有3种不同的操作模式,分别是

  • 命令模式:用于输入命令
  • 插入模式:用于输入和编辑文本。
  • 末行模式:用于保存文件并退出。

vim启动时,处于默认的命令模式,在该模式下,大多数键表示特殊命令。移动光标的命令键示例如下:

- h:将光标向左移动一个字符
- l:将光标向右移动一个字符
- j:将光标向下移动一个字符
- k:将光标向上移动一个字符

在X-window中使用vim时,也可以通过箭头键来完成光标的移动。要输入文本进行编辑,用户必须输入i(插入)或a(追加)命令将vim切换到插入模式

- i:切换到插入模式,插入文本。
- a:切换到插入模式,追加文本。
  要退出插入模式,请按ESC键一次或多次。在命令模式下,输入“:”进入末行模式,将文本保存为文件或退出vim:
- :w:写入(保存)文件。
- :q:退出vim。
- :wq:保存并退出。
- :q!:不保存更改,强制退出。

虽然许多Unix用户已经习惯了vim不同的操作模式,但是其他用户可能认为与其他基于图形用户界面(GUI)的编辑器相比,vim使用起来既不自然也不方便。以下类型的编辑器属于通常所说的所见即所得(WYSIWYG)编辑器。在WYSIWYG编辑器中,用户可以输入文本,用箭头键移动光标,和普通的文本输入一样。通常,通过输入一个特殊的meta键,接着输入一个字母键即可创建命令。例如:

- Ctrl+C:中止或退出。
- Ctrl+K:删除行到缓冲区。
- Ctrl+Y:从缓冲区内容中复制或粘贴。
- Ctrl+S:保存已编辑文本等。

②操作过程

  1. 安装sudo apt install - y vim

    我这里报错,教程上的方法也不行,我猜测应该换源

​ 之前换过一次源,可还是没效果,这次用了中科大源,终于解决了

​ 参考linux虚拟机换源

​ 换源后下载,成功

2 程序开发

(1)程序开发步骤

  1. 创建源文件

  2. 用gcc把源文件转换成二进制可执行文件a.out。如: gcc t1.c t2.c

    gcc是一个程序,包含三个主要步骤:

    (1)将C源文件转换为汇编代码文件,即将.c文件转为.s文件。

    (2)将汇编代码转换为目标代码,即将.s文件转为.o文件。

    (3)链接。

    • 将.o文件的所有代码段组合成单一代码段。
    • 将所有数据段组合成单一数据段。
    • 将所有BSS段组合成单一bss段。
    • 使用.o文件的重定位信息调整组合指针、数据和bss段的偏移量。
    • 用符号表来解析各个.o文件之间的交叉引用。

    推荐博客如何在linux(ubantu)操作系统运行c语言文件,介绍了使用自带的文本编辑器和vim两种方式

    编译时我又出现了问题,报错说编译失败,找不到stdio.h。又是一波查教程,最后还是换源。这次把清华源也加进去了。

    参考博客:fatal error: stdio.h: No such file or directory

    换源的时候又遇到另一个报错:E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)

    最终完美解决!

    总的来说步骤如下:

    1. 找到保存的文件,在该目录下“右键鼠标”,选择“在终端打开”
    2. 输入“ls”命令看到本目录下有我们的文件“hello.c”,

    (如果你想要运行c++文件,那么刚刚在创建文件的时候要选择语言为cpp)

    1. 使用命令”gcc hello.c -o hello“将c语言文件”hello.c“编译成”hello“的可执行文件,
    2. 最后用”./hello“运行该文件,可以看到输出结果为”Hello world!“。

(2)静态与动态链接

创建二进制可执行文件的两种方式:静态链接与动态链接

  1. 静态链接

    链接器将所有必要的库函数代码和数据纳入a.out文件中。这使得a.out文件完整、独立,但通常非常大

  2. 动态链接

  • 减小每个a.out文件大小;
  • 许多执行程序在内存中共享相同库函数;
  • 修改库函数无需重新编译源文件。
    动态链接所用的库称为动态链接库(DLL)。它们在Linux中称为共享库(.so文件)。动态加载(DL)库是指按需加载的共享库,可用作插件和动态加载模块。

(3)可执行文件

虽然默认的二进制可执行文件名为a.out,但实际文件格式可变。其中包括

  1. 二进制可执行平面文件
  2. a.out可执行文件
  3. ELF可执行文件(Linux中默认的二进制可执行文件,更适合动态链接)

(4)程序执行过程

  1. 读取a.out文件头,以确定所需的总内存大小,包含栈空间大小:TotalSize = _brk +stackSize
  2. sh从总大小中分配一个内存区给执行映像
  3. sh放弃旧映像,开始执行新映像
  4. 执行从crt0.o开始,调用main()

3 链接库

(1)创建静态链接库

gcc -c mysum.c
ar rcs libmylib.a mysum.o
gcc -static t.c -L. -lmylib
a.out

静态库的构建:
A.编辑库的实现代码和接口声明

B、编译成目标文件

命令:gcc -c calc.c
gcc -c show.c
生成.o文件
C、打包成静态库
命令:ar -r libmath.a calc.o show.o
D、编译并链接静态库
命令:gcc main.c libmath.a
最后生成一个a.out可执行文件
使用命令:./a.out运行程序。

(2)创建动态链接库

gcc -c -fPIC mysum.c
gcc -shared -o libmylib.so mysum.o
gcc t.c -L. -lmylib
export LD_LIBRARY_PATH=./
a.out

网络分享:Linux学习一:创建静态库以及静态库链接,并执行a.out文件

什么是静态库?
1、静态库的本质就是将目标文件打包成一个文件。
2、链接静态库就是将库中被调用的代码复制到调用模块中。
3、静态库的扩展名是.a 例:libxxx.a

4 GDB调试工具

  1. 创建makefile:

    t: t.c
    gcc -g -o t t.c
    
  2. 然后使用EMACS编辑c语言源文件。

  3. 编译源代码,打开Tools菜单,选择编译或输入gcc -g -o t t.c命令

  4. 启动GDB

  5. 多窗口GDB:从GDB菜单中,选择Gud->GDB-MI->Display Other Windows

5 C语言相关

  • 结构体和指针
  • 链表处理
  • 树与二叉树

标签:文件,gcc,静态,vim,2022,2023,20201324,链接,out
来源: https://www.cnblogs.com/cqszxy2020/p/16656416.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有