《unix環境高階程式設計》書中原始碼編譯問題解決

alexanderkenndy發表於2014-08-07

《unix環境高階程式設計》書中原始碼編譯問題解決

第一次接觸《unix環境高階程式設計》這本經典書籍,不過在編譯書中提供的原始碼時出現錯誤。最終,還是看編譯錯誤提示解決了這個問題。

我的系統是:linux/Ubuntu 12.04原始碼下載地址:http://www.apuebook.com/src.tar.gz。下載原始碼之後,就是解壓到相關目錄下。比如我解壓到/home/username/目錄下,即/home/username/apue.2e。(注意:username即是你的使用者名稱)。

然後有兩個檔案修改操作:

1.將apue.2e目錄下的檔案Make.defines.linux中的 WKDIR=/home/xxx/apue.2e修改為WKDIR=/home/username/apue.2e。

2.再進入apue.2e目錄下的std目錄,開啟linux.mk,將裡面的nawk全部替換為awk。

檔案移動操作:

把 /home/username/apue.2e/inlcude目錄下的 apue.h檔案和位於 /home/username/apue.2e/lib目錄下的 error.c檔案都複製到 /usr/include目錄下。

還有就是在apue.h檔案的最後一行#endif新增#include “error.c”.

最後進入/home/username/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"

注意:先輸入make clean後在輸入make;此時編譯通過。

OK,問題解決。相當於敲開《unix環境高階程式設計》這本書的大門吧!慢慢深入。


轉:http://blog.csdn.net/SunshineDabby/article/details/8723105

相關文章