首先需要make一次源代码
编辑源码解压生成的apue.2e文件夹下的Make.defines.linux
修改WKDIR=/home/var/apue.2e为你的apue.2e目录,比如我的apue源码解压在/home/biye,那我就改为:
WKDIR=/home/biye/apue.2e
然后进入apue.2e/std 目录,编辑linux.mk。修改里面所有的nawk为awk。
最后返回apue.2e目录,执行make命令。
接下来就是编译书中出现的各种实例了:
以编译file文件夹下的ls1.c为例,以下是编译源码时的错误提示跟解决方法(假定你的工作目录跟我的一样,为/home/biye/apue.2e)
错误提示1:
ls1.c:1:19: apue.h: No such file or directory
ls1.c: In function `main':
ls1.c:13: error: `NULL' undeclared (first use in this function)
ls1.c:13: error: (Each undeclared identifier is reported only once
ls1.c:13: error: for each function it appears in.)
解决办法:
拷贝apue.h到系统默认头文件目录中
$cp /home/biye/apue.2e/include/apue.h /usr/include
错误提示2:
/tmp/ccBBopm0.o(.text+0x2b): In function `main':
: undefined reference to `err_quit'
/tmp/ccBBopm0.o(.text+0x5f): In function `main':
: undefined reference to `err_sys'
collect2: ld returned 1 exit status
解决办法:
err_quit跟err_sys是作者自己定义的错误处理函数,需要单独定义头文件
在/usr/include 下新建一个名为myerr.h的文件
拷贝lib/error.c的内容到myerr.h(此头文件在原书的附录B中),然后保存,退出。
再次编辑ls1.c文件,在包含文件内加入#include"myerr.h"
重新编译通过后,执行./a.out /home/biye,结果如下: