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
", (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 ",即可。但是不保证能全部执行书上代码。