1. 编译过程如下
$ tar -xzvf unpv13e.tar.gz // 解压文件夹
$ cd unpv13e
$ ./configure // 配置
$ cd lib
$ make
$ cd ../libfree
$ make // 在该步出错,解决方法往下看
$ cd ../libroute
$ make //这一步可能会出错,可以直接忽略,表示自己的系统不支持 4.4BSD,并不影响对该书的学习
$ cd ../libgai
$ make
注:在编译libfree
时可能出错如下:
gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o in_cksum.o in_cksum.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o inet_ntop.o inet_ntop.c
inet_ntop.c: In function ‘inet_ntop’:
inet_ntop.c:61: error: argument ‘size’ doesn’t match prototype
/usr/include/arpa/inet.h:65: error: prototype declaration
make: *** [inet_ntop.o] Error 1
解决方法:libfree/inet_ntop.c
第61行 size_t size 改成 socklen_t size,重新编译即可
2.拷贝静态链接库
$ cd .. //进入unpv13e 目录
$ cp libunp.a /usr/lib
$ cp libunp.a /usr/lib64
3.将unp.h文件和config.h文件拷贝至系统目录
$ vim lib/unp.h //将 unp.h 中#include "../config.h"修改为#include "config.h"
$ cp lib/unp.h /usr/include
$ cp config.h /usr/include
4.编译本书例子
注:需要加上静态链接库-lunp
(-l
参数加上libunp.a
去掉lib
和.a
之后的组合)
$ cd ./intro
$ gcc daytimetcpcli.c -o daytimetcpcli -lunp
编译可能会出错:
connect error:Connection refused
解决方法:开启xinetd
服务
$ cd /etc/xinetd.d/
$ vim daytime-dgram //将其中的disable=yes改为disable=no
$ vim daytime-stream //将其中的disable=yes改为disable=no
$ service xinetd restart
再次在执行,成功:
$ ./daytimetcpcli 127.0.0.1