1.APUE2源代码下载:
2.我保存到了/root下.解压缩:tar -xzvf src.tar.gz 【在windows下用7zip等工具会解压出空文件,必须用linux】
3.cd apue.2e进入apue.2e目录,查看README,告诉我们linux系统只要修改Make.defines.linux再make
4.vi Make.defines.linux 修改WKDIR=/root/apue.2e 就是说工作目录为WKDIR=/root/apue.2e
5.修改/root/apue.2e/std/linux.mk把全部的nawk改为awk.因些linux默认没有nawk
6.make
一个需要注意的地方:(自己)
至于 err_sys等出错函数的处理,为了方便,也搞进了apue.h中,这样以后只需要一个较大的apue.h就可以了,注意为了处理如fig16.14这样的有
extern int connect_retry(int, const struct sockaddr *, socklen_t);
此函数在fig16.9中,但此文件也包含apue.h;所以进行 gcc fig16.14.c fig16.9.c
出现了 err_*系列函数重复定义的问题,所以就把apue.h中err_*系列函数的声明和定义都标记了关键字static。
加强版的apue.h见下方,下载后替换即可:
|
文件: | apue.h.zip |
大小: | 2KB |
下载: | 下载 |
|
关于extern例子的几点体会:
编译的时候(gcc -c)不会出问题,问题出现在链接阶段,虽然apue.h有
#ifndef 来避免多重包含,但它在gcc fig16.14.c fig16.9.c
(只有fig16.14.c
中有main函数)时这两个文件的时候是并列的,避免多重包含只是对在编译其中一个文件的时候,它的头文件中防止多次包含apue.h。
以后对于文件fig2.1变成fig2.1.c的问题通过下面的文章解决:
http://blog.chinaunix.net/u3/100698/showart.php?id=2053626 UNP的设置:
阅读(2466) | 评论(0) | 转发(0) |