我的环境是 Ubuntu11.10 发行版.
内核版本是3.0.0
因为 APUE 使用的是 nawk, 而 Ubuntu 自带的是 nawk, 应该是不修改可以直接使用的.
网上也有些方法是要安装 gawk 然后修改 std/linux.mk 将两个 nawk 改为 gawk 来实现的. (要放在 make 之前)
所以, 就要使用如下命令来安装 gawk 了:
sudo apt-get install gawk
然后............
1.到 www.apuebook.com 去下载源代码.
2. tar 解包 cd apue.2e 或图形界面右键 Open with Archibe Manager 然后 Extrat.
3.vim Make.defines.linux 修改变量WKDIR,指向 apue 源码所在位置, 我的在 /home/think/apue/apue.2e/ 所以:
WKDIR= /home/think/apue/apue.2e/
4. vim include/apue.h 增加常量 ARG_MAX,这是 threadctl/getenv1.c 和 threadctl/getenv3.c 要用到的;
4096 是参考值,如果有问题,自行修改。
#define ARG_MAX 4096
5.vim threadctl/getenv1.c 增加 #include "apue.h"
6.vim threadctl/getenv3.c 增加 #include "apue.h"
7.vim threads/badexit2.c 修改第31行,将 pthread_self() 的返回值转换为 int 类型。
printf("thread 2: ID is %d\n", (int)pthread_self()); /* 注意, 注释符号不要使用 '//' 格式 */
8. make
9. sudo cp include/apue.h /usr/include/
sudo cp lib/libapue.a /usr/lib
测试一下,用-lapue命令让编译器链接apue库.
gcc main.c -lapue
通过......
还有一种方法就是:
将 apue.h 和 error.c 复制到 /usr/include/ 目录下.
然后再将 apue.h 最后一行的 #endif 前面添加 #include "error.c" 就 OK 了.
这个也是可以的. 使用时直接包含头文件就行了. 由于在系统目录下, 无所谓 <> 和 "" 了.