首页 > 其他分享 > 2022-2023-1 20201324《信息安全系统设计与实现(上)》第2章

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

时间:2022-09-04 23:01:41浏览次数:106  
标签:文件 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
From: https://www.cnblogs.com/cqszxy2020/p/16656416.html

相关文章

  • 学年(2022-2023-1) 学号(20221317)《计算机基础与程序设计》第1周学习总结
    作业信息班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业链接:https://www.cnblogs.com/zhanquanchen/p/16654783.html作业要求:快速浏览教材(https://www......
  • 【2022.9.2】Django框架(网页伪静态、视图层、模板层)
    学习内容概要网页伪静态视图层三板斧JsonResponseform表单上传文件FBV与CBV(核心)CBV源代码(面向对象)模板层模板语法传值模板语法之过滤器模板语法之标签......
  • 2022-09-04 京剧《红鬃烈马》
    故事情节介绍:唐丞相王允,生有三女,大女王金钏,嫁苏龙,官居户部;二女王银钏,配魏虎,兵部侍郎;三女王宝钏,因过溺爱,在十字街头,高搭彩楼,抛球选婿,球中花郎薛平贵。王允嫌贫爱富,悔却前言......
  • 2022-09-04 京剧《荒山泪》
    京剧《荒山泪》,又名《祈祷和平》,剧本是金仲荪先生在1929年编写的,程砚秋1930年岁尾首演。1956年此剧拍摄了电影。此戏和《春闺梦》是姊妹篇。1929年3月的蒋桂战争、5月的......
  • 2022年9月5日
      最近状态比之前好了很多!要开始新的人生旅程了!祝我顺风顺水顺顺顺!  如果事与愿违,上天必另有安排!  失之东隅,收之桑榆!  感恩父母!感恩岁月!都是来渡你的!一......
  • 2022-2023-1 20221408《计算机基础与程序设计》第一周学习总结
    班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业链接:https://www.cnblogs.com/zhanquanchen/p/16654783.html作业目标:快速浏览教材作业正文:https://www.cn......
  • 【2022-08-30】哺乳
    20:00习惯的枷锁,开始的时候轻得难以察觉,到后来却重得无法摆脱。                                ......
  • VS2022编译太慢
    一个C++的helloworld,在vs里硬是10秒才能编译启动。不知道大家有没有遇到。禁用符号加载还是很慢。甚至换成code::block来编译运行也很慢。解决方法是把编译出的exe程序或......
  • 2022java-web一条龙工具安装
    @目录java安装java-jdk安装java环境变量配置java-eclipse工具安装Java-idea工具安装MySQL安装navicat安装tomcat安装maven安装配置本地仓库配置镜像配置jdk备忘~安装常见......
  • "蔚来杯"2022牛客暑期多校训练营7
    CConstructiveProblemsNeverDie题意:给你一个数组A,你需要构造一个排列P,使得P[i]≠A[i]分析:考虑构造不出来的情况如果所有A[i]都相同一定不成立先构造P[i]=i......