APUE 的源码本身带有一些错误,需要修改之后才能正常编译。
以下方法在 Ubuntu 12.10 上测试通过。
tar
解包, cd apue.2e
Make.defines.linux
,修改变量 WKDIR
,指向你放置 apue 源码的位置,我的是 /home/huangz/code/apue.2e
,所以设置为 WKDIR=/home/huangz/code/apue.2e
include/apue.h
,增加一个常量 ARG_MAX
: #defines ARG_MAX 4096
, threadctl/getenv1.c
和 threadctl/getenv3.c
要用到这个常量; 4096
只是参考值,可以视情况按需修改。threadctl/getenv1.c
增加一行: #include "apue.h"
threadctl/getenv3.c
增加一行: #include "apue.h"
threads/badexit2.c
,修改第 31 行,将 pthread_self()
的返回值转换为 int
类型: printf("thread 2: ID is %d\n", (int)pthread_self());
。std/linux.mk
,将两个 nawk
替换为 gawk
。make
sudo cp include/apue.h /usr/include
,以及 sudo cp lib/libapue.a /usr/lib
。至此,所有步骤执行完成了。别忘了在编译的时候,要让编辑器链接 apue
库:
gcc xxxx.c -lapue