APUE2源代码编译

来源:互联网 发布:mysql 添加key分区 编辑:程序博客网 时间:2024/05/20 10:23

APUE2源代码的README文档说只需要把Make.defines.x(x指操作系统名)中的WKDIR改为源代码所在目录即可make安装,但实际上这样做远远不够,还需要改几个地方。经过搜索,按照这两个帖子

http://blog.csdn.net/dycwahaha/article/details/2300938

http://blog.csdn.net/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"


4、提示/usr/include/bits/timex.h:31:7: 错误:expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’。这是因为APUE2的头文件ipp.h中定义的status和C标准库的头文件定义的status重名了,而在printd.c文件中又同时引用了这两个头文件,导致冲突。可以将ipp.h文件里的status改成其他名称,比如Status,再次编译,错误提示status神马的信息,找到status出错的位置,把它改为Status就行了

OK,可以顺利make了!