配置《UNIX环境高级编程》中程序的运行环境,解决“apue.h:没有那个文件或目录”错误
2012-12-10 17:30
453 查看
刚开始看《UNIX环境高级编程》这本书,今天开始调试《UNIX环境高级编程》中的第一个程序,错误提示 “错误:apue.h:没有那个文件或目录”。
今天弱弱地敲了书中的第一个书中的程序,如下:
#include "apue.h"
int main(void)
{
printf("hello world from process ID %d/n", getpid());
exit(0);
}
然后一编译,提示“错误:apue.h:没有那个文件或目录”。
网上一搜,找到了很多解决方案,仔细一看,发现都相似。于是,我照着步骤,实践了一把。下面详细叙述。
在网上找了一些资料,按照提示,在http://www.apuebook.com/下载了src.tar.gz压缩包,原来这本书还有一个专门的网站支持。建议大家到这个网站上看看,有书中的源代码 勘误等补充。
apue.h不是Unix/Linux系统自带的,此头文件包括了Unix程序所需的常用头文件及作者Richard自己写的出错处理函数。所以在默认情况下,gcc在编译时是读不到这个头文件的。
步骤:
1. 解压src.tar.gz压缩包,命令如下
tar -xzvf src.tar.gz
2. 解压之后,会得到一个apue.2e的文件夹。以我的文件夹结构为例,我把src.tar.gz解压到了/home/wycherley/unix/中。
在/home/wycherley/unix/apue.2e中,把文件Make.defines.linux中的 WKDIR=/home/sar/apue.2e修改为WKDIR=/home/wycherley/unix/apue.2e
3.然后再进入apue.2e目录下的std目录,打开linux.mk,将里面的nawk全部替换为awk。(修改两处。)
以上2 ,3步我是在vim中,直接手动修改的。总共修改了3个地方,工作量不大。
4. 修改/home/wycherley/unix/apue.2e/include下的apue.h文件,加入一行
#define ARG_MAX 4096
(若在此步在 apue.h中添加 #include "error.c"这一行,会报错,说重复定义了)
5. 打开终端,进入/home/wycherley/unix/apue.2e目录下,执行make命令,即在终端输入make,开始编译。命令如下:
cd /home/wycherley/unix/apue.2e
make clean //先删除以前生成的可执行文件及 .o文件
make
6. 在这一步,我这里编译成功了。将将apue.h和error.c两个文件copy到 /usr/include。
cp /home/wycherley/unix/apue.2e/include/apue.h /usr/include
cp /home/wycherley/unix/apue.2e/lib/error.c /usr/include
7. 进入 /usr/include,编辑拷贝过来的apue.h
在最后一行 #endif /* _APUE_H */ 前面添加一行 #include "error.c"
然后保存退出。
8. 这时,就可以运行下载的程序,和自己编辑的程序了。
===================================================================================
以下是参考的文章:
http://blog.csdn.net/peilw625311/article/details/7454099 http://luochunfeng163.blog.163.com/blog/static/16700924920125451819928/ http://www.cnblogs.com/feiling/archive/2012/02/15/2353286.html http://blog.chinaunix.net/uid-20665047-id-3123350.html
今天弱弱地敲了书中的第一个书中的程序,如下:
#include "apue.h"
int main(void)
{
printf("hello world from process ID %d/n", getpid());
exit(0);
}
然后一编译,提示“错误:apue.h:没有那个文件或目录”。
网上一搜,找到了很多解决方案,仔细一看,发现都相似。于是,我照着步骤,实践了一把。下面详细叙述。
在网上找了一些资料,按照提示,在http://www.apuebook.com/下载了src.tar.gz压缩包,原来这本书还有一个专门的网站支持。建议大家到这个网站上看看,有书中的源代码 勘误等补充。
apue.h不是Unix/Linux系统自带的,此头文件包括了Unix程序所需的常用头文件及作者Richard自己写的出错处理函数。所以在默认情况下,gcc在编译时是读不到这个头文件的。
步骤:
1. 解压src.tar.gz压缩包,命令如下
tar -xzvf src.tar.gz
2. 解压之后,会得到一个apue.2e的文件夹。以我的文件夹结构为例,我把src.tar.gz解压到了/home/wycherley/unix/中。
在/home/wycherley/unix/apue.2e中,把文件Make.defines.linux中的 WKDIR=/home/sar/apue.2e修改为WKDIR=/home/wycherley/unix/apue.2e
3.然后再进入apue.2e目录下的std目录,打开linux.mk,将里面的nawk全部替换为awk。(修改两处。)
以上2 ,3步我是在vim中,直接手动修改的。总共修改了3个地方,工作量不大。
4. 修改/home/wycherley/unix/apue.2e/include下的apue.h文件,加入一行
#define ARG_MAX 4096
(若在此步在 apue.h中添加 #include "error.c"这一行,会报错,说重复定义了)
5. 打开终端,进入/home/wycherley/unix/apue.2e目录下,执行make命令,即在终端输入make,开始编译。命令如下:
cd /home/wycherley/unix/apue.2e
make clean //先删除以前生成的可执行文件及 .o文件
make
6. 在这一步,我这里编译成功了。将将apue.h和error.c两个文件copy到 /usr/include。
cp /home/wycherley/unix/apue.2e/include/apue.h /usr/include
cp /home/wycherley/unix/apue.2e/lib/error.c /usr/include
7. 进入 /usr/include,编辑拷贝过来的apue.h
在最后一行 #endif /* _APUE_H */ 前面添加一行 #include "error.c"
然后保存退出。
8. 这时,就可以运行下载的程序,和自己编辑的程序了。
===================================================================================
以下是参考的文章:
http://blog.csdn.net/peilw625311/article/details/7454099 http://luochunfeng163.blog.163.com/blog/static/16700924920125451819928/ http://www.cnblogs.com/feiling/archive/2012/02/15/2353286.html http://blog.chinaunix.net/uid-20665047-id-3123350.html
相关文章推荐
- 在电脑上找到这个路径:D:\jakarta-tomcat-6\conf\Catalina,将localhost目录直接删除掉,再一运行,就没事了! 因为配置文件中配置了启动程序,而webapps文件夹下却没有此应用程序,所以出现了上述错误。
- 解决交叉编译环境错误:/lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录
- 解决 Python.h:没有那个文件或目录 错误的方法
- /usr/bin/python^M: 解释器错误: 没有那个文件或目录(问题解决)
- 关于win10 php环境配置后运行php文件出现HTTP 错误 401.3 - Unauthorized的解决方法
- 解决 Python.h:没有那个文件或目录 错误的方法
- 致命错误: mysql/mysql.h:没有那个文件或目录 解决办法
- 解决 Python.h:没有那个文件或目录 错误的方法
- centos7 解决 Python.h:没有那个文件或目录 错误的方法
- 64位Ubuntu配置android环境报错(...adb": error=2, 没有那个文件或目录)
- 解决jdk环境变量设置完后,在cmd中运行javac出现’javac‘不是内部或外部命令,也不是可运行的程序或批处理文件的错误提示
- UNIX环境高级编程第二版中编译程序提示“apue.h:找不到这个文件或目录”错误
- 遇到错误-----安装DBD:MySql模块遇到的问题及解决办法Can't exec "mysql_config": 没有那个文件或目录 at Makefile.PL line 479.
- 用anjuta编译gtk程序时出现类似与"main.c::10:21:gtk/gtk.h:没有那个文件和目录"问题的解决
- 错误:readline/readline.h:没有那个文件或目录解决方法
- Ubuntu14.04(64位)配置android环境报错(...adb": error=2, 没有那个文件或目录)的解决方案
- 解决Linux下运行Python脚本显示“: 没有那个文件或目录”的问题
- 遇到错误-----安装DBD:MySql模块遇到的问题及解决办法Can't exec "mysql_config": 没有那个文件或目录 at Makefile.PL line 479.
- 解决 Python.h:没有那个文件或目录 错误的方法
- 错误:readline/readline.h:没有那个文件或目录解决方法