20155301 Makefile和MyOD和共享库

20155301 Makefile和MyOD和共享库

Makefile

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

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

1.若是这个工程没有编译过,那么咱们的全部C文件都要编译并被连接。git

2.若是这个工程的某几个C文件被修改,那么咱们只编译被修改的C文件,并连接目标程序。数组

3.若是这个工程的头文件被改变了,那么咱们须要编译引用了这几个头文件的C文件,并连接目标程序。函数

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

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

步骤:

1.咱们能够把这个内容保存在文件为“Makefile”或“makefile”的文件中.操作系统

2.而后在该目录下直接输入命令“make”就能够生成执行文件edit。若是要删除执行文件和全部的中间目标文件,那么,只要简单地执行一下“make clean”就能够了。指针

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

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

完成截图

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

项目连接

相关文章
相关标签/搜索