Chinaunix首页 | 论坛 | 博客
  • 博客访问: 609302
  • 博文数量: 66
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1810
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-23 13:53
个人简介

linux

文章分类

全部博文(66)

文章存档

2016年(1)

2015年(14)

2014年(32)

2013年(19)

分类: LINUX

2013-09-12 20:05:58

编译方法:
编译书中的程序实例时会出现问题,提示 “错误:apue.h:没有那个文件或目录”。

apue.h 是作者自定义的一个头文件,并不是Unix/Linux系统自带的,此头文件包括了Unix程序所需的常用头文件及作者Richard自己写的出错处理函数。所以在默认情况下,gcc在编译时是读不到这个头文件的。

在这个网站 下载tar.gz格式的源码包,然后解压至某个目录,
比如说/home/yarkee/下,然后进入目录apue.2e,把文件Make.defines.linux 中的WKDIR=/home/xxx/apue.2e 修改为 WKDIR=/home/yarkee/apue.2e ,然后再进入apue.2e目录下的std目录,打开linux.mk,将里面的nawk全部替换为awk,如果是用的vi/vim编辑器,可以使用这个命令  :1.$s/nawk/awk/g (注意前面有冒号)

然后在此目录下运行make命令,即回到 /home/yarkee/apue.2e 目录在终端中输入 “./make” (不含引号)

然后把 /home/yarkee/apue.2e/inlcude 目录下的 apue.h 文件和位于 /home/yarkee/apue.2e/lib 目录下的 error.c 文件都复制到 /usr/include 目录下,注意复制这两个文件你需要有root权限。之所以要这样做,是因为gcc在链接头文件时会到 /usr/include 这个目录下寻找需要的头文件,若找不到则报错。

最终还要编辑一下复制过来的 apue.h 文件
在最后一行 #endif 前面添加一行 #include “error.c”

编译时出现的问题:
问题一:

解决方法:
解决方法是把ipp.h文件里的status改成其他名称,比如Status,再次编译,错误提示status神马的信息,找到status出错的位置,把它改为Status就行了。
此处我的status出错位置在printd.c的第977行中:

在make就好了;

问题二:



解决方法:

在apue.2e/include/apue.h中添加一行:
#define ARG_MAX 4096
打开apue.2e/threadctl/getenv3.c(包括getenv1.c),添加一行:
#include "apue.h"

再次编译即可。

感谢:http://blog.csdn.net/chendi9010/article/details/6865558
                    http://www.cnblogs.com/kill-signal/archive/2012/06/11/2545098.html          


阅读(1969) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~