執行apue (unix 環境高階程式設計)第一個例子
拿到APUE第三版,大家肯定都是想驗證書上的程式碼,用除錯程式碼的過程來學習本書。但是Linux不像Windows,linux是一個free(自由)軟體,free軟體帶來的問題就是執行一個小小的程式都要折騰半天。現在把執行第一個程式的過程記錄下來,以供後來查閱。
第一步,當然是下載書中的原始碼,省的自己費盡的敲,下載的是第三版,apue.3e,這裡不得不吐槽一下,裡面的程式碼組織很亂,不是按照章節列出的,不知是不是我下載的問題,還是作者故意為之。
第二步,apue.3e資料夾裡有makefile檔案,肯定要執行make命令了,可惜功力有限,目前看不懂這些makefile的功能,需要惡補一下makefile的知識了。
第三步,意料之中的編譯不通過,錯誤提示:can,t find -lbsd,解決辦法是新增libbsd.a的靜態連結庫。
第四步,執行apt-get update,然後apt-get install libbsd-dev,在執行apt-get update過程中,可能會遇到更新不成功的情況,一般是更新軟體伺服器的問題,只能找個比較好的ubuntu版本了,版本中設定了比較好用的伺服器,否則自己找伺服器也是苦逼的事情。
第五步,上述執行成功後,再make,OK。
第六步,將apue.h
拷貝到/usr/include/ 將./lib/libapue.a 拷貝到/usr/local/lib/ 為什麼要將libapue.a移到/usr/local/lib中呢?原因是libapue.a是apue.h標頭檔案中包含的所有函式及巨集定義的具體實現,是一個靜態連結庫。
第七步,進入/apue.3e/intro,刪除原來的ls1,然後編譯ls1.c,然後就是十有八九的報錯,undefined reference to `err_quit' undefined reference to `err_sys' ,真是苦逼,處處是坑的感覺。
第七步,/usr/include 下新建一個名為myerr.h的檔案,檔案內容我上傳到csdn中
第八步,再編譯ls1.c,終於成功,可以執行./ls1 /home,可以看到打印出目錄裡的檔案了。
這些磕磕絆絆的過程確實和Windows下程式設計完全不是一個感覺,需要對Linux的系統及命令非常熟悉。