Linux C语言编程基础
2021/9/27 7:12:42
本文主要是介绍Linux C语言编程基础,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Linux C语言编程基础
关于openEuler的安装过程,可以参考一下我的博客https://www.cnblogs.com/pogbar/p/15334582.html
Vmtool的安装在本文最后部分
任务详情
0. 基于Ubuntu或OpenEuler完成下面的任务(OpenEuler有加分)
1.选择教材第二章的一节进行编程基础练习(2.10,2.11,2.12,2.13,2.14任选一个)
2.建立自己的项目目录,包含自己学号信息(如20190100linkedlist),构建项目结构(src, include,bin, lib, docs, test...),然后把相应代码和文档放置到正确位置,用tree命令查看项目结构,提交截图(5分)
3.进行gcc相关练习(ESc, iso, -I等)提交相关截图(5分)
4.进行静态库,动态库制作和调用练习,提交相关截图(5分)
5.进行gdb相关练习,至少包含四种断点的设置,提交相关截图(10分)
6.编写makefile(5分)
除了MyOD,其他实验均在openEuler系统下完成
一、编程基础联系,以二叉树为例
使用vim编辑tree.c并编译
可以正常编译输出
二、建立项目目录
src, include,bin, lib, docs, test文件夹
bin文件夹:放程序执行目录,.exe等存放的地方;
inc文件夹:.h头文件存放的地方;
src文件夹:.c文件存放的地方;
main.c文件为工程主函数程序执行文件。
安装tree:
可以显示出tree结构
加入学号这一认证信息
三、gcc相关练习
gcc的编译流程分为四个步骤,分别为:
· 预处理(Pre-Processing)
· 编译(Compiling)
· 汇编(Assembling)
· 链接(Linking)
以hello.c为例子,在这四个步骤中可以设置选项分别生成hello.i, hello.s, hello.o以及最终的hello文件:
hello.c : 最初的源代码文件;
hello.i : 经过编译预处理的源代码;
hello.s : 汇编处理后的汇编代码;
hello.o : 编译后的目标文件,即含有最终编译出的机器码,但它里面所引用的其他文件中函数的内存位置尚未定义。
hello / a.out : 最终的可执行文件
以tree.c文件为例
这个程序,一步到位的编译指令是:
gcc tree.c -o tree
①预处理
gcc -E tree.c -o tree.i 或 gcc -E tree.c
可以输出文件中存放着test.c经预处理之后的代码。
gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。在本例中,预处理结果就是将stdio.h 文件中的内容插入到tree.c中了。
②编译为汇编代码(Compilation)
预处理之后,可直接对生成的test.i文件编译,生成汇编代码:
gcc -S tree.i -o tree.s
gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。
③汇编(Assembly)
对于上一小节中生成的汇编代码文件test.s,gas汇编器负责将其编译为目标文件,如下:
gcc -c tree.s -o tree.o
④连接(Linking)
gcc连接器是gas提供的,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。附加的目标文件包括静态连接库和动态连接库。
对于上一小节中生成的tree.o,将其与C标准输入输出库进行连接,最终生成程序test
gcc tree.o -o tree
运行验证:
四、静态库,动态库
程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries):
1、静态函数库,是在程序执行前就加入到目标程序中去了 ;
2、动态函数库同共享函数库是一个东西(在linux上叫共享对象库, 文件后缀是.so ,windows上叫动态加载函数库, 文件后缀是.dll)
以选做MyOD为例
1、输入指令制作静态库
2、输入指令制作动态库
五、gdb相关练习
gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。
一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
编写一个简单的c程序并使用gdb调试
先安装gdb
①start
用start命令开始执行程序:
②单步执行(n)
在start命令后,每输入一个n就能够单步执行一条语句(输入一个命令后,直接回车表示最近输入命令的含义)。当程序执行完时,可以输入quit命令来退出gdb模式。
③gdb断点调试
gdb a会进入a可执行程序的gdb模式
start命令就使程序准备运行程序中的第一条语句。
b 8是表示在此函数处设置一个断点,表示在程序第八行设置一个断点。
c表示继续运行程序,程序会在设置断点处停下来。
displayb表示将b的值显示出来(undisplay取消对变量的跟踪),然后再输入单步调试命令n(next)就可以使程序继续运行。
四种断点分类:
断点有助于快速跳过没有问题的代码,然后在有问题的代码上慢慢走慢慢分析,“断点加单步”是使用调试器的基本方法。至于应该在哪里设置断点,怎么知道哪些代码可以跳过,而哪些代码要慢慢走,也要通过对错误现象的分析和假设来确定,以前我们用printf打印中间结果时,也要分析应该在哪里插入printf,打印哪些中间结果,调试的基本思路是一样的。
六、编写makefile
也是基于MyOD
选做
1、vim编写makefile
2、安装make
3、测试makeflie
makefile测试正确
遇到的问题:
openEuler安装vmtool里面的细节
右击虚拟机,点击安装vmtool
这时,DVD会变成vmware镜像,把里面的压缩包复制到桌面,然后解压,如图
在终端中运行解压文件夹中的.pl文件(perl xxx.pl),一直按enter键,即可装好[如果不是root权限需加个sudo]
如果不放心有没有装好,可以从主机拖拽文件查看,如下图:
由此看见,vmtool已经成功装上了
这篇关于Linux C语言编程基础的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法
- 2024-08-21【Linux】gnome桌面环境切换KDE Plasma
- 2024-08-19如何安装 VMware Tools (macOS, Linux, Windows)
- 2024-08-15Linux部署Scrapy教程:入门级指南