一)下载
在这个网站 http://www.apuebook.com/ 下载tar.gz格式的源码包,然后解压至某个目录,比如说/home/tian/下,然后进入目录apue.2e,把文件Make.defines.linux 中的 WKDIR=/home/xxx/apue.2e 修改为 WKDIR=/home/tian/apue.2e ,然后再进入apue.2e目录下的std目录,打开linux.mk,将里面的nawk全部替换为awk,如果是用的vim编辑器,可以使用这个命令 :s/nawk/awk/g ,然后在此目录下运行make命令,即回到 /home/tian/apue.2e 目录在终端中输入 make.然后把 /home/tian/apue.2e/inlcude 目录下的 apue.h 文件和位于 /home/tian/apue.2e/lib 目录下的 error.c 文件都复制到 /usr/include 目录下,注意复制这两个文件你需要有root权限。之所以要这样做,是因为gcc在链接头文件时会到 /usr/include 这个目录下寻找需要的头文件,若找不到会报错。
二)排错
1.没有stropts.h
catgetmsg.c:2:21: 致命错误:stropts.h:没有那个文件或目录
编译中断。
make[2]: *** [catgetmsg] 错误 1
make[2]: 离开目录“/home/sincere/apue.2e/advio”
make[1]: *** [linux] 错误 1
make[1]: 离开目录“/home/sincere/apue.2e”
make: *** [all] 错误 2
如果出现stropts.h找不到的情况,则下载ftp://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
重新make即可
2. apue.2e/ipp/ipp.h 出现宏定义: #define status u.st
编译出现错误提示: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘.’ token
解决方案: 将apue.2e/ipp/ipp.h的宏定义:#define status u.sth中的status改成Status;然后将同目录下的printd.c中的977行的i=ntohs(hp->status);中的status改成Status。
3. 提示 ARG_MAX 未定义
解决方案: 在apue.2e/include/apue.h中添加一行:#define ARG_MAX 4096;打开apue.2e/threadctl/getenv1.c和apue.2e/threadctl/getenv3.c,添加一行:#include “apue.h”
解决上面的三个问题后,就可以编译通过了,复制/apue.2e/include/apue.h和/apue.2e/lib/libapue.a到你的源代码目录
然后就可以运行了
本文详细介绍了如何从源码编译Advanced Programming in the UNIX® Environment (APUE)的过程,包括下载源码、配置编译环境、解决stropts.h缺失问题、修正宏定义错误及ARG_MAX未定义等问题。

3030

被折叠的 条评论
为什么被折叠?



