APUE全稱《Advanced Programming in the UNIXEnvironment》(UNIX環(huán)境高級編程)
書中例子大都使用作者自己寫的頭文件,所以需要解決一下,還好學習這本書的前輩還是很多的。所以還是記錄一下解決過程吧,方便以后配置。
APUE源碼下載: http://www.apuebook.com/(選擇書的版本,然后Source Code)
(一)解壓縮
如這樣的路徑:/home/usr/apue.2e.我選擇將apue.2e放在usr/local中。
(二)修改文件
將apue.2e目錄下的文件Make.defines.linux中的 WKDIR后面路徑改為如上路徑
進入apue.2e目錄下的std目錄,將linux.mk文件里面的nawk全部替換為awk
(三)排錯
1,沒有stropts.h
catgetmsg.c:2:21: 致命錯誤:stropts.h:沒有那個文件或目錄編譯中斷。make[2]: *** [catgetmsg] 錯誤 1make[2]: 離開目錄“/home/sincere/apue.2e/advio”make[1]: *** [linux] 錯誤 1make[1]: 離開目錄“/home/sincere/apue.2e”make: *** [all] 錯誤 2
如果出現(xiàn)stropts.h找不到的情況,則下載glibc-2.11,解壓縮
cp ./glibc-2.11/streams/stropts.h /usr/include
cp ./glibc-2.11/bits/stropts.h /usr/include/bits
cp ./glibc-2.11/sysdeps/x86_64/bits/xtitypes.h/usr/include/bits
2. apue.2e/ipp/ipp.h 出現(xiàn)宏定義:#define status u.st
編譯出現(xiàn)錯誤提示: 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。
3. 提示 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 編譯通過了
(四)頭文件和靜態(tài)庫的使用
method1:
復制/apue.2e/include/apue.h和/apue.2e/lib/libapue.a到你的源代碼目錄
然后運行
gcc -o hello hello.c libapue.a
method2:
把頭文件apue.h放到/usr/include/中,注意要以root用戶操作以下命令
cp apue.2e/include/apue.h/usr/include
cp apue.2e/lib/libapue.a/usr/lib/
之后編譯時候可以使用gcc源程序.c-o可執(zhí)行程序名/usr/lib/libapue.a
ps,如果c++引用此頭文件和靜態(tài)庫要使用extern"C"{include"apue.h"}
OK!問題解決,可以繼續(xù)學習APUE了~~
引用:
http://www.tuicool.com/articles/yU7Rvq
愛華網(wǎng)



