UNIX环境高级编程 apue.h头文件的配置

时间:2023-01-10 00:14:28

http://jimslinbing.blog.163.com/blog/static/85054319201292712414518/

1.到http://www.apuebook.com下载源码
2.tar解包,cd apue.2e
3.vi Make.defines.linux   修改变量WKDIR,指向你的apue源码的位置,我的是/home/huangz/code/apue.2e,所以
  WKDIR=/home/huangz/code/apue.2e
4.vi include/apue.h  增加一个常量ARG_MAX,这是threadctl/getenv1.c和threadctl/getenv3.c要用到的;4096这个值是参考里给的,如果有问题,自己修改吧。
  #define ARG_MAX 4096
5.vi threadctl/getenv1.c   增加
  #include "apue.h"
6.vi threadctl/getenv3.c   增加
  #include "apue.h"
7.vi threads/badexit2.c   修改第31行,将pthread_self()的返回值转换为int类型。
  printf("thread 2: ID is %d\n", (int)pthread_self());
8.vi std/linux.mk   将两个nawk改为awk,如果是用的vi/vim编辑器,可以使用这个命令:$s/nawk/awk/g
9.apue.h头文件的#endif前面添加一行 #include "error.c"
10.make
11.sudo cp include/apue.h      /usr/include
   sudo cp apue.2e/lib/error.c /usr/include
   sudo cp lib/libapue.a       /usr/lib
   
好了,测试一下,记得要用-lapue命令让编译器链接libapue.a库
gcc main.c -lapue
cc -o threadid threadid.c -lapue -lpthread

编译过程出现错误:
In file included from /usr/include/i386-linux-gnu/bits/time.h:86:0,
                 from /usr/include/time.h:42,
                 from /usr/include/pthread.h:26,
                 from printd.c:11:
/usr/include/i386-linux-gnu/bits/timex.h:31:7: 错误: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘.’ token
这是linux的time.h中定义林全局变量status,在apue.h/ipp的ipp.h中也定义了,改成Status,
编译出错的时候将相应位置的status改成Status即可,
再把apue.h/ipp/printd.c中的hp->status 改成hp->Status即可。

总结:下载了apue.h以后,将apue.h放到/usr/include/下,在/apue.2e/lib/error.c,
将error.c复制到/usr/include/下,在apue.h的最后一行 #endif前 加一句#include"error.c ",即可。但是不保证能全部执行书上代码。