apue.h 是作者自定义的一个头文件,并不是Unix/Linux系统自带的,此头文件包括了Unix程序所需的常用头文件及作者Richard自己写的出错处理函数。
所以在默认情况下,gcc在编译时是读不到这个头文件的。
(1) 在http://www.apuebook.com/下载src.2e.tar.gz源代码的压缩包。(2) 解压至某个目录,比如说/home/godsoul/下。
(3) 进入目录apue.2e,把文件 Make.defines.linux 中的 WKDIR=/home/xxx/apue.2e 修改为 WKDIR=/home/godsoul/apue.2e 。
(4) 进入apue.2e目录下的std目录,打开linux.mk,将里面的nawk全部替换为awk,如果是用的vi/vim编辑器,可以使用这个 命令::%s/nawk/awk/g
(5) 在apue.2e目录下运行make命令,即回到 /home/godsoul/apue.2e 目录在终端中输入 “./make” (不含引号)这时一般会遇到stropts.h找不到的情况,则到http://ftp.gnu.org/gnu/glibc/下载glibc-2.11,解压缩
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
再次编译,可能又出现ARG_MAX未定义,可以这么修改:
在apue.2e/include/apue.h中添加一行:#define ARG_MAX 4096
打开apue.2e/threadctl/getenv1.c 和apue.2e/threadctl/getenv3.c,添加一行:#include “apue.h”
改好后make clean再重新make
(6) 然后把 /home/godsoul/apue.2e/inlcude 目录下的 apue.h 文件和位于 /home/godsoul/apue.2e/lib 目录下的 error.c 文件都复制到 /usr/include 目录下,
把apue.2e/lib/libapue.a 复制到/usr/lib/和 /usr/lib64下。注意复制这文件你需要有root权限。之所以要这样做,是因为gcc在链接头文件时会到
/usr/include 这个目录下寻找 需要的头文件,若找不到则报错。
(7) 最终还要编辑一下复制过来的 apue.h 文件在最后一行 #endif 前面添加一行 #include “error.c”
(8) 验证,找到清单1-2(随便一个都行),编译, 成功通过,完成!
整理自http://www.cnblogs.com/feiling/archive/2012/02/15/2353286.html