UNIX环境高级编程中的apue.h错误

来源:互联网 发布:类似于flipboard的软件 编辑:程序博客网 时间:2024/06/07 03:16

正在拜读Richard Stevens的大作《UNIX环境高级编程》,当读到第一个编程实例时,就懵了!一个简短的程序,就是编译不通过!各种错误!上网找了一下,才知道原来是那个头文件apue.h在我的系统里面没有,那个文件其实是Richard他自己写的一个头文件,里面定义了一系列的常量与变量,还有他也写了error.cz这个文件,这个文件是他定义了很多错误处理函数的文件,如果这个文件系统找不到的话,像他的err_quit()等函数就无法使用!好了,不费话了,下面是我从网上搜寻来的数据,在我的系统上(CentOS 6.3)完成了配置:

先在这个网站 http://www.apuebook.com/src.tar.gz 下载tar.gz格式的源码包,然后解压至某个目录,比如说/home/godsoul/下,然后进入目录apue.2e,把文件 Make.defines.linux 中的 WKDIR=/home/xxx/apue.2e 修改为 WKDIR=/home/godsoul/apue.2e ,然后再进入apue.2e目录下的std目录,打开linux.mk,将里面的nawk全部替换为awk,如果是用的vi/vim编辑器,可以使用这个 命令  :1.$s/nawk/awk/g (注意前面有冒号)
然后在此目录下运行make命令,原本以为可以成功,结果报错:说是stropts.h找不到,原来这是glibc里面的头文件,所以接着,我们要安装glibc(一定要源码):

下载了glibc-2.17.tar.gz,解压后:(glibc下载:http://www.gnu.org/software/libc/)

cp ./glibc-2.17/streams/stropts.h /usr/include
cp ./glibc-2.17/bits/stropts.h /usr/include/bits
cp ./glibc-2.17/sysdeps/x86/bits/xtitypes.h /usr/include/bits(注:我系统是x86的,它里面有x86,x86_64,i386等,请与你的系统相配)

接下来再make一下,还是报错!(对,就是这么苦逼........)

这次报错说是ARG_MAX未定义,这是他定义的一个宏常量,我们要手动修改其大小:

在apue.2e/include/apue.h中添加一行:
#define ARG_MAX 4096

接着还要在关联文件中包含apue.h才行:

打开apue.2e/threadctl/getenv1.c和apue.2e/threadctl/getenv3.c,添加一行:
#include “apue.h”

改好后make clean再重新make,这次成功了!

这时你编译程序还是报错!说是err_quit等函数找不到,这是因为你的系统找不到定义此类函数的文件。这类函数在apue.2e/lib/error.c中定义,所以你要把这个文件拷贝到/usr/include 目录下,同时还要复制apue.2e/lib/libapue.a 到/usr/lib/和 /usr/lib64下。还有你要把 /home/godsoul/apue.2e/inlcude 目录下的 apue.h 文件也复制到/usr/include中去!

然后修改刚复制过来的apue.h文件:

在最后一行 #endif 前面添加一行 #include “error.c”

这下就全部该搞定了!



原创粉丝点击