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

項目連接

相關文章
相關標籤/搜索