代码改变世界

UNIX环境高级编程中的apue.h错误解决办法

2012-12-18 10:49  小耳  阅读(334)  评论(0编辑  收藏  举报

在Richard Stevens 的大作《UNIX环境高级编程》,编译书中的程序实例时会出现问题,提示 “错误:apue.h:没有那个文件或目录”。

apue.h 是作者自定义的一个头文件,并不是Unix/Linux系统自带的,此头文件包括了Unix程序所需的常用头文件及作者Richard自己写的出错处理函数。所以在默认情况下,gcc在编译时是读不到这个头文件的。

1、先在这个网站 http://www.apuebook.com/ 下载tar.gz格式的源码包,然后解压至某个目录,比如说/home/xhm/下,然后进入目录apue.2e,把文件Make.defines.linux 中的 WKDIR=/home/xhm/apue.2e 修改为 WKDIR=/home/xhm/apue.2e ,然后再进入apue.2e目录下的std目录,打开linux.mk,将里面的nawk全部替换为awk。

2、然后在此目录下运行make命令,即回到 /home/xhm/apue.2e 目录在终端中输入 “./make” (不含引号)
出现错误1:没找到apue.h。
解决:把当前源码中的apue.h(在include/apue.h)拷贝到/usr/include
再编译,出现错误2:ARG_MAX 没找到
在apue.h中加入#define ARG_MAX 4096
再编译:出现没找到。在那个文件加入 #include <apue.h>就可以
(apue.2e/threadctl/getenv1.c 和apue.2e/threadctl/getenv3.c 一般这两个文件出现这点错误)

最后编译通过。

3、把头文件apue.h放到/usr/include/中,注意要以root用户操作以下命令
cp ~/apue.2e/include/apue.h /usr/include[/code]

cp ~/apue.2e/lib/libapue.a /usr/lib[/code] 

在编译apue里面的例子时,直接#include <apue.h>  就可以。
如果需要静态库,在最后面加入 -lapue 编译就行了。
例如:要编译15-1.c 需要用到库文件。
编译如下:gcc 15-1.c -o 15-1 -lapue