《unix高级环境编程》关于apue.h和源码编译问题

      《unix高级环境编程》这本书的源码下载连接http://www.apuebook.com/,这里有几个版本,根据需要下载,我的是第二版的源码。

       为了能够方便学习,在你的编译环境能够使用apue.h这个头文件(这个头文件是作者自行编写的),所以我们必须要编译源码,使我们能够使用该头文件。编译的过程中会报错,这里列出我编译过程过解决错误的过程。

       在进行make编译之前,准备工作的工作

  1. 首先将apue.2e目录下的文件Make.defines.linux中的 WKDIR=/home/xxx/apue.2e修改为 WKDIR=/path/apue.2e,其中path代表你源码位置的路径。
  2. 再进入apue.2e目录下的std目录,打开linux.mk,将里面的nawk全部替换为awk。
  3. 把 /path/apue.2e/inlcude目录下的 apue.h文件和位于 /path/apue.2e/lib目录下的 error.c文件都复制到 /usr/include目录下。并在apue.h文件的最后一行#endif之前添加#include “error.c”.


       当你对apue.2e进行make命令时会出错:

        错误1:编译过程中显示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。(表示很好奇,为什么改为大写就可以)

        错误2:提示ARG_MAX未定义

        解决方案:在apue.2e/include/apue.h中添加一行:#define ARG_MAX 4096;打开apue.2e/threadctl/getenv1.c和apue.2e/threadctl/getenv3.c,添加一行:#include "apue.h",同时 /usr/include目录下的apue.h头文件也做一样的修改。

        注意:先输入make clean后在输入make;此时编译通过,编译完成后,将/path/apue.2e/lib/libapue.a复制到/usr/lib下面。
接下来就可以在你的环境下使用apue.h该头文件了。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值