20155301 Makefile和MyOD和共享库

20155301 Makefile和MyOD和共享库

Makefile

作用:make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。

我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。我们的规则是:

1.如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。

2.如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。

3.如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

 target... : prerequisites ...
command
 ...
...
-------------------------------------------------------------------------------

target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签。
prerequisites就是,要生成那个target所需要的文件或是目标。
command也就是make需要执行的命令。(任意的Shell命令)

步骤:

1.我们可以把这个内容保存在文件为“Makefile”或“makefile”的文件中.

2.然后在该目录下直接输入命令“make”就可以生成执行文件edit。如果要删除执行文件和所有的中间目标文件,那么,只要简单地执行一下“make clean”就可以了。

3.在这个makefile中,目标文件(target)包含:执行文件edit和中间目标文件(*.o),依赖文件(prerequisites)就是冒号后面的那些 .c 文件和 .h文件。

4.定义了如何生成目标文件的操作系统命令,一定要以一个Tab键作为开头。make并不管命令是怎么工作的,他只管执行所定义的命令。make会比较targets文件和prerequisites文件的修改日期,如果prerequisites文件的日期要比targets文件的日期要新,或者target不存在的话,那么,make就会执行后续定义的命令。

完成截图

image
图片中第一次出现的问题就是没有用tab作为开头,调整后成功运行。

项目链接

MyOd

作用

myod的功能就是从文件中读入文本,并将其转化为16进制的形式表示出来,并且是16个字母为一行。

实现

实现myod过程还是比较麻烦的,看了几个同学写的看不太懂,就用了一些文件的知识加上C语言的基础实现了基本的功能。运用到的文件的知识基本有:

1.定义文件指针FILE *fp1,用于指向文件的某一行。

2.fp1=fopen(name,"r"),用于打开文件,如果成功继续,不成功显示ERROR并退出。

3.while(fgets(model,N,fp1)),用于将某行的少于N个的字符串读入到model中,以便后续操作。

基本思路:

1.打开文件

2.从文件中读入字符串到model中。

3.利用循环,当(下标+1)到达16的倍数的时候输出回车,并且输出上一行的ASCII码值

4.设置结束条件,当字符串数组遍历到了'\0'时结束循环。

完成截图

image

项目链接

共享库

没有及时完成的原因

共享库时课上的一个内容,课上由于之前的内容不够熟练,在设置断点运行的时候浪费了很多时间,导致最后没有做完。

功能

共享库是致力于解决静态库缺陷的一个现代创新产物。共享库是一个目标模块,在运行或加载时,可以加载到任意的内存地址,并和一个在内存中的程序连接起来。这个过程称为动态链接,是有一个叫做动态链接器的程序来执行。共享库也称为共享目标,在Linux系统中通常用.so后缀来表示。

与静态库的对比

相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数时才调用函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。而且如果多个应用程序都要使用同一函数库,动态库就非常适合,可以减少应用程序的体积。

完成截图

image

项目链接

posted @ 2017-10-01 12:07  滕树晨  阅读(403)  评论(4编辑  收藏  举报