UNIX環境高級編程 apue.h頭文件的配置


http://jimslinbing.blog.163.com/blog/static/85054319201292712414518/

1.到http://www.apuebook.com下載源碼
2.tar解包,cd apue.2e
3.vi Make.defines.linux   修改變量WKDIR,指向你的apue源碼的位置,我的是/home/huangz/code/apue.2e,所以
  WKDIR=/home/huangz/code/apue.2e
4.vi include/apue.h  增加一個常量ARG_MAX,這是threadctl/getenv1.c和threadctl/getenv3.c要用到的;4096這個值是參考里給的,如果有問題,自己修改吧。
  #define ARG_MAX 4096
5.vi threadctl/getenv1.c   增加
  #include "apue.h"
6.vi threadctl/getenv3.c   增加
  #include "apue.h"
7.vi threads/badexit2.c   修改第31行,將pthread_self()的返回值轉換為int類型。
  printf("thread 2: ID is %d\n", (int)pthread_self());
8.vi std/linux.mk   將兩個nawk改為awk,如果是用的vi/vim編輯器,可以使用這個命令:$s/nawk/awk/g
9.apue.h頭文件的#endif前面添加一行 #include "error.c"
10.make
11.sudo cp include/apue.h      /usr/include
   sudo cp apue.2e/lib/error.c /usr/include
   sudo cp lib/libapue.a       /usr/lib
   
好了,測試一下,記得要用-lapue命令讓編譯器鏈接libapue.a庫
gcc main.c -lapue
cc -o threadid threadid.c -lapue -lpthread


編譯過程出現錯誤:
In file included from /usr/include/i386-linux-gnu/bits/time.h:86:0,
                 from /usr/include/time.h:42,
                 from /usr/include/pthread.h:26,
                 from printd.c:11:
/usr/include/i386-linux-gnu/bits/timex.h:31:7: 錯誤: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘.’ token
這是linux的time.h中定義林全局變量status,在apue.h/ipp的ipp.h中也定義了,改成Status,
編譯出錯的時候將相應位置的status改成Status即可,
再把apue.h/ipp/printd.c中的hp->status 改成hp->Status即可。

總結:下載了apue.h以后,將apue.h放到/usr/include/下,在/apue.2e/lib/error.c,
將error.c復制到/usr/include/下,在apue.h的最后一行 #endif前 加一句#include"error.c ",即可。但是不保證能全部執行書上代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM