所有例子在linux-2.6.29.3(gcc-4.3.3)下编译通过,需要做的修改如下:
l 打开apue.2e文件夹下的Make.defines.linux文件(根据你的系统选择对应文件),修改WKDIR=/home/var/apue.2e为你的apue.2e目录,如WKDIR=/home/pydeng/apue.2e。
l 然后进入apue.2e/std 目录,编辑linux.mk,修改里面所有的nawk为awk。
l 修改脚本文件systype.sh的权限,给当前用户及其所在组和其他组添加可执行权限。
l 返回apue.2e目录,执行make命令。
l 在编译apue.2e/threadctl/getenv1.c时,报告ARG_MAX没有定义。在linux-2.6.X下,ARG_MAX被定义在/usr/include/linux/limit.h文件里面。于是,将getenv1.c和getenv3.c文件的include改成#include <linux/limit.h>。
l 再次make,报告threads/badexit2.c文件的31行存在类型不匹配。将pthread_self()的返回值强制转换成int。
l 执行make,顺利编译所有文件。
l 要在apue.2e子目录下单独编译一个文件,需要对头文件apue.h的路径作相对修改,如改为#include "../include/apue.h"。另一种办法是,直接将apue.h拷贝到/usr/include下面。然后执行类似下面的命令。libapue.a库实现了apue.h中声明的函数。
pydeng@pydeng-laptop:~/apue.2e/file$ gcc –o ls1 ls1.c ../lib/libapue.a |
l Enjoy yourself:)