1. 程式人生 > >《unix環境高階程式設計》書中原始碼編譯 詳細流程

《unix環境高階程式設計》書中原始碼編譯 詳細流程

(2)解壓到了 /home/username/ 目錄下,即/home/username/apue.2e (注意:username即是自己的使用者名稱,下同)。

(3)此時cd到apue.2e目錄,輸入make,出錯如下:

make[2]: Entering directory ‘/home/ives/sar/apue.2e/lib’
gcc -DLINUX -ansi -I/home/sar/apue.2e/include -Wall -D_GNU_SOURCE -c -o bufargs.o bufargs.c
bufargs.c:1:18: fatal error: apue.h: 沒有那個檔案或目錄

解決方案:修改Make.defines.linux中的 WKDIR=/home/sar/apue.2e修改為WKDIR=/home/username/apue.2e。

(4)非必須步驟(進入apue.2e目錄下的std目錄,開啟linux.mk,將裡面的nawk全部替換為awk。)

(5)此時用make clean命令再用make命令編譯出現的問題 :

(5.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。

(5.2)提示ARG_MAX未定義

解決方案:修改檔案apue.2e/ threadctl目錄下getenv1.c、getenv3.c。全部新增#define ARG_MAX 4096巨集定義

(6)make clean然後make成功後。修改fig1.3名稱為fig013.c,輸入命令$gcc -Wall fig013.c -o fig013,出現問題如下:

err_sys等未定義

解決方案:
(6.1)複製apue.2e/lib/error.c到/usr/include目錄下。
步驟:Ctrl+Alt+T進入命令列。
用cd 進入 apue.2e/lib
sudo cp error.c /usr/include/

(6.2) 複製apue.2e/include/apue.h到任意某處,修改unixl/apue.h檔案
檔案末尾#endif之前新增下面語句:

#include"error.c"

(6.3)複製apue.h檔案到/usr/include目錄下。
用cd 進入相應資料夾
sudo cp apue.h /usr/include/

(6.4)複製apue.2e/lib/libapue.a到目錄/usr/lib/
用cd 進入 apue.2e/lib
sudo cp llibapue.a /usr/lib/

(7)$gcc -Wall fig013.c -o fig013

$./fig013 ~/apue.2e/lib (這個為程式所需的路徑引數)

成功輸出結果!