(一)首先进行全部源码的编译
1. APUE2源码下载:http://www.apuebook.com/src.tar.gz
2. 解压在目录/work/apue下:tar –xzvf src.tar.gz
3. cd apue.2e进入apue.2e目录,cat README,参看说明。根据使用的系统修改相应的文件,比如linux系统,就修改Make.defines.linux文件。编辑该文件的内容主要是修改其中的WKDIR,即源码所在文件夹的绝对路径名。原文件中WKDIR=/Users/sar/apue.2e,我修改为 /Users/kirchhoff/apue.2e。保存修改。
4. 如果不知道自己的系统类型,在当前目录下有个systype.sh脚本,可以检测操作系统的类型:有FreeBSD,Linux,MacOS和Solaris等。执行这个脚本:
./systype.sh
如果没有执行权限的话,就执行
#chmod u+x systype.sh
给当前用户添加可执行权限。
其实最简单的方法是直接执行
uname –s
命令就可以查看当前使用的是什么系统。
5. 源码编译。执行命令:
make
在Makefile文件中,make之后,首先执行systype.sh脚本,即首先确定操作系统的类型,然后再进行源码的编译。在编译过程中可能会出现一些warning,这些都是正常的,导致警告的原因可能是采用编译器的版本不同或者是同一类型操作系统的版本不同。但是,只要make的过程不出现error,就会顺利的编译成功。
至此,源代码编译就结束了,但是我们编译生成的可执行文件在哪里呢?在apue.2e目录下面以figx.x命名的都是链接。但是实际编译的过程并不是编译的这些文件。而是编译在各个文件夹中的后缀名为*.c的程序。作者把同一章节或者相近几个章节的源代码放在某一个文件夹下面(include和lib文件夹除外)。而文件夹的命名一般是和该章对应的标题是一致的,采用的是英文标题的全称或简写。譬如,advio文件夹对应Chapter 14. Advanced I/O,该章的代码就放在该文件夹下面。还有文件夹proc对应Chapter 8. Process Control,文件夹termios对应Chapter 18. Terminal I/O等等,基本上每一章的代码都可以在这些文件夹中找到。
(二)编译单个源文件:
apue编程的例子都有关include "apue.h"的代码,其实apue.h并不是系统自带的,它是作者编写的头文件,源代码在附录B中.因此一个方法是.把刚才生成的 /apue.2e/include/apue.h直接复制到/usr/include下.
cp /Users/kirchhoff/apue.2e/include/apue.h /usr/include
还有像err_quit和err_sys是作者自己定义的错误处理函数,需要单独定义头文件
在/usr/include 下新建一个名为myerr.h的文件,把 “Figure B-2 输出至标准出错文件的出错处理函数”的内容内容复制进去到myerr.h就可以了。不想自己敲代码的话,可以直接使用源代码中提供的文件,用如下命令:
cp /Users/kirchhoff/apue.2e/lib/error.c /usr/include/myerr.h
然后在写程序的时候,这样包含头文件:
#include “apue.h”
#include “myerr.h”