apue 源码编译问题
2016-07-28 23:15
537 查看
第二版源码下载:http://files.cnblogs.com/files/shirishiyue/apue2e_src.tar.zip
环境:suse linux
最近在读 Richard Stevens 的大作《UNIX环境高级编程》,相信很多初读此书的人都会与我一样遇到这个问题,编译书中的程序实例时会出现问题,提示 “错误:apue.h:没有那个文件或目录”。
apue.h 是作者自定义的一个头文件,并不是Unix/Linux系统自带的,此头文件包括了Unix程序所需的常用头文件及作者Richard自己写的出错处理函数。所以在默认情况下,gcc在编译时是读不到这个头文件的。
先在这个网站 http://www.apuebook.com/ 下载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”
错误与解决
gcc -DLINUX -ansi -I/home/sdoning/apue/apue.2e/include -Wall -D_GNU_SOURCE -c -o getenv1.o getenv1.c
getenv1.c:4: error: ‘ARG_MAX’ undeclared here (not in a function)
make[2]: *** [getenv1.o] Error 1
make[2]: Leaving directory `/home/sdoning/apue/apue.2e/threadctl’
make[1]: *** [linux] Error 1
make[1]: Leaving directory `/home/sdoning/apue/apue.2e’
make: *** [all] Error 2
解决方法:
在apue.2e/include/apue.h中添加一行:
#define ARG_MAX 4096
打开apue.2e/threadctl/getenv3.c(包括getenv1.c),添加一行:
#include "apue.h"
再次编译即可。
环境:suse linux
最近在读 Richard Stevens 的大作《UNIX环境高级编程》,相信很多初读此书的人都会与我一样遇到这个问题,编译书中的程序实例时会出现问题,提示 “错误:apue.h:没有那个文件或目录”。
apue.h 是作者自定义的一个头文件,并不是Unix/Linux系统自带的,此头文件包括了Unix程序所需的常用头文件及作者Richard自己写的出错处理函数。所以在默认情况下,gcc在编译时是读不到这个头文件的。
先在这个网站 http://www.apuebook.com/ 下载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”
错误与解决
gcc -DLINUX -ansi -I/home/sdoning/apue/apue.2e/include -Wall -D_GNU_SOURCE -c -o getenv1.o getenv1.c
getenv1.c:4: error: ‘ARG_MAX’ undeclared here (not in a function)
make[2]: *** [getenv1.o] Error 1
make[2]: Leaving directory `/home/sdoning/apue/apue.2e/threadctl’
make[1]: *** [linux] Error 1
make[1]: Leaving directory `/home/sdoning/apue/apue.2e’
make: *** [all] Error 2
解决方法:
在apue.2e/include/apue.h中添加一行:
#define ARG_MAX 4096
打开apue.2e/threadctl/getenv3.c(包括getenv1.c),添加一行:
#include "apue.h"
再次编译即可。
相关文章推荐
- iOS中UIButton详解
- 【连载】研究EasyUI系统——EasyUI简介
- 【Leetcode】之Unique Binary Search Trees
- LeetCode:Unique Binary Search Trees系列
- Mybatis select返回值为map时,选取表字段的两列作为key,value
- position属性的四个value
- 63. Unique Paths II
- UESTC 1170 红与蓝 计算几何、贪心、红蓝点对
- -[UIWindow viewForFirstBaselineLayout]: unrecognized selector sent to instance
- 【poj1019】 Number Sequence
- BZOJ 1803 Query on a tree III
- Java多线程--synchronized ,Condition,BlockingQueue应用实例
- [已解决]Could not allocate CursorWindow '' of size of size 2097152 due to error -12.
- iOS基础:UITableView简单使用
- QtQuick学习整理
- Android 播放视频UI的功耗优化 && 动态增加view小结
- 最新cocoapods安装
- UITableView方法使用
- 沙箱的UI小工具——轻量级虚拟系统
- servlet中request等中文乱码问题