关于UNIX高级环境编程中 apue.h的解决方法

找了挺多文章的,有些写的不全 编译出现了错误 备忘

1.去该网站http://www.apuebook.com/下载源码 src.tar.bz
2.解压到某目录,假定为/home/user,进入解压后的文件修改 Make.defines.linux中的WKDIR=/home/user/apue.2e
3.返回至apue.2e/std目录下面,修改linux.mk,将里面的nawk全部改为awk,可以使用这个命令 :1,$s/nawk/awk/g
4.make后将会遇见两个问题。
a) gcc -DLINUX -ansi -I/tmp/apue.2e/include -Wall -D_GNU_SOURCE -DDEBUG -c -o printd.oprintd.c
In file included from /usr/include/i386-linux-gnu/bits/time.h:86:0,
from /usr/include/time.h:42, from /usr/include/pthread.h:26,
from printd.c:11: /usr/include/i386-linux-gnu/bits/timex.h:31:7: 错误: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘attribute’ before ‘.’ token

原因:  在apue.2e/ipp.h中定义了一个宏定义status和 /usr/include/i386-linux-gnu/bits/timex.h中的成员status冲突 
解决方法:  修改这个apue.2e/ipp/ipp.h文件中的宏名称,例如改为Status  然后将apue.2e/ipp/printd.c中977行的 hp->status 改为hp->Status 

b)ARG_MAX未定义 
在apue.2e/include/apue.h中添加一行:     #define ARG_MAX 4096     
打开apue.2e/threadctl/getenv1.c 和apue.2e/threadctl/getenv3.c,添加一行:     #include "apue.h" 

5.解决完以上两个问题后,就可以make成功。
6.把头文件apue.h放到/usr/include/中,注意要以root用户操作以下命令
cp ~/apue.2e/include/apue.h /usr/include cp ~/apue.2e/lib/libapue.a /usr/lib/

7.编译时候可以使用 gcc 源程序.c -o 可执行程序名 /usr/lib/libapue.a ps,如果c++引用此头文件和静态库要使用extern “C”{include “apue.h”}

引用自http://wenku.baidu.com/link?url=Zv1ETzjBBtMx-GdWNrkiJendLX-h8mANW6Aq3uyrlcqQLtDyeuKreHctBt6RbqVFFDTzC35wBukjTUE319DmxW7MH_H-2dQS8DQdG2e0pcO

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值