APUE 头文件apue.h 解决方法
轉自http://www.tuicool.com/articles/yU7Rvq
APUE全稱《Advanced Programming in the UNIX Environment》(UNIX環境高級編程)
書中例子大都使用作者自己寫的頭文件,所以需要解決一下,還好學習這本書的前輩還是很多的。所以還是記錄一下解決過程吧,方便以后配置。
APUE源碼下載: http://www.apuebook.com/ (選擇書的版本,然后Source Code)
(一)解壓縮
如這樣的路徑:/home/sincere/work/c/UNIX-C/apue.2e
(二)修改文件
將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] 錯誤 1 make[2]: 離開目錄“/home/sincere/apue.2e/advio” make[1]: *** [linux] 錯誤 1 make[1]: 離開目錄“/home/sincere/apue.2e” make: *** [all] 錯誤 2如果出現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 出現宏定義: #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。
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”
解決上面的三個問題后,就可以編譯通過了
(四)頭文件和靜態庫的使用
復制/apue.2e/include/apue.h和/apue.2e/lib/libapue.a到你的源代碼目錄
然后運行
gcc -o hello hello.c libapue.aOK!問題解決,可以繼續學習APUE了~~
參考文章:
《unix環境高級編程》書中源代碼編譯問題解決
如何使用APUE源代碼(UNIX高級編程)
UNIX環境高級編程中的apue.h錯誤
總結
以上是生活随笔為你收集整理的APUE 头文件apue.h 解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 留数的计算
- 下一篇: 面试 - 阿里华为资深HR面试套路全揭晓