APUE2源代码的README文档说只需要把Make.defines.x(x指操作系统名)中的WKDIR改为源代码所在目录即可make安装,但实际上这样做远远不够,还需要改几个地方。经过搜索,按照这两个帖子
http://blog.youkuaiyun.com/dycwahaha/article/details/2300938
http://blog.youkuaiyun.com/ce_endless/article/details/6885708
的方法修改后,APUE2的源代码已经能够在Fedora 16上正确编译,步骤如下:
1、进入apue.2e/std 目录,编辑linux.mk。修改里面所有的nawk为awk
2、出现stropts.h找不到的情况,则可以下载一个C标准库,比如glibc,将三个文件复制到/usr/lib
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
3、提示ARG_MAX未定义
可以在apue.2e/include/apue.h中添加一行:
#define ARG_MAX 4096 // 4096是POSIX标准的最小可接受值
打开apue.2e/threadctl/getenv1.c 和apue.2e/threadctl/getenv3.c,添加一行:
#include "apue.h"
OK,可以顺利make了!