天天看點

《unix進階環境程式設計》關于apue.h和源碼編譯問題

      《unix進階環境程式設計》這本書的源碼下載下傳連接配接http://www.apuebook.com/,這裡有幾個版本,根據需要下載下傳,我的是第二版的源碼。

       為了能夠友善學習,在你的編譯環境能夠使用apue.h這個頭檔案(這個頭檔案是作者自行編寫的),是以我們必須要編譯源碼,使我們能夠使用該頭檔案。編譯的過程中會報錯,這裡列出我編譯過程過解決錯誤的過程。

       在進行make編譯之前,準備工作的工作

  1. 首先将apue.2e目錄下的檔案Make.defines.linux中的 WKDIR=/home/xxx/apue.2e修改為 WKDIR=/path/apue.2e,其中path代表你源碼位置的路徑。
  2. 再進入apue.2e目錄下的std目錄,打開linux.mk,将裡面的nawk全部替換為awk。
  3. 把 /path/apue.2e/inlcude目錄下的 apue.h檔案和位于 /path/apue.2e/lib目錄下的 error.c檔案都複制到 /usr/include目錄下。并在apue.h檔案的最後一行#endif之前添加#include “error.c”.

       當你對apue.2e進行make指令時會出錯:

        錯誤1:編譯過程中顯示apue.2e/ipp/ipp.h 宏定義:#define status u.st的錯誤提示:expected ':', ',', ';', '}' or '__attribute__' before '.' token

        解決方案:将apue.2e/ipp/ipp.h的宏定義:#define status u.sth中的status改成Status;然後将相同目錄下的printd.c檔案的977行i=ntohs(hp->status);中的status改成Status。(表示很好奇,為什麼改為大寫就可以)

        錯誤2:提示ARG_MAX未定義

        解決方案:在apue.2e/include/apue.h中添加一行:#define ARG_MAX 4096;打開apue.2e/threadctl/getenv1.c和apue.2e/threadctl/getenv3.c,添加一行:#include "apue.h",同時 /usr/include目錄下的apue.h頭檔案也做一樣的修改。

        注意:先輸入make clean後在輸入make;此時編譯通過,編譯完成後,将/path/apue.2e/lib/libapue.a複制到/usr/lib下面。接下來就可以在你的環境下使用apue.h該頭檔案了。

繼續閱讀