1、下载源码
建议去官网下载( http://www.apuebook.com/ ),话说今年APUE第三版出来了,消化了第二版后可以去拜读一下。
2、解压至某个目录,修改Make.defines.linux
假设解压到/home下,进入目录apue.2e,把文件Make.defines.linux 中的 WKDIR=/home/xxx/apue.2e 修改为 WKDIR=/home/apue.2e。
3、报错
make后报错,错误代码如下:
/usr/include/bits/timex.h:31:7: 错误:expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘.’ token
make[2]: *** [printd.o] 错误 1
make[2]: 离开目录“/home/alex/apue/apue.2e/ipp”
make[1]: *** [linux] 错误 1
make[1]: 离开目录“/home/alex/apue/apue.2e”
make: *** [all] 错误 2、
出现这个问题是由于在timex.h的第31行出现了status的定义:
int status; /* clock command/status */
而文件apue.2e/ipp/ipp.h中有宏定义:
#define status u.st
这样编译的时候就出问题了,如编译提示:
expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘.’ token
解决方法是把ipp.h文件里的status改成其他名称,比如Status,再次编译,错误提示status神马的信息,找到status出错的位置,把它改为Status就行了。
此处我的status出错位置在printd.c的第977行中:
i = ntohs(hp->status);