http://jimslinbing.blog.163.com/blog/static/85054319201292712414518/
1.到http://www.apuebook.com下载源码2.tar解包cd apue.2e3.vi Make.defines.linux 修改变量WKDIR指向你的apue源码的位置我的是/home/huangz/code/apue.2e所以 WKDIR/home/huangz/code/apue.2e4.vi include/apue.h 增加一个常量ARG_MAX这是threadctl/getenv1.c和threadctl/getenv3.c要用到的4096这个值是参考里给的如果有问题自己修改吧。 #define ARG_MAX 40965.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/g9.apue.h头文件的#endif前面添加一行 #include "error.c"10.make11.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 -lapuecc -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 "即可。但是不保证能全部执行书上代码。