1,安装编译器,为了齐全还是安装一下build-essential

sudo apt-get install build-essential  

2,下载书中的头文件及示例源码

Source Code

3,解压unpv13e.tar.gz后进入目录查看README,然后可以按照里面提示操作,不过会遇到问题

第一步:在终端中进入upnv13e目录,然后执行代码:
1. chmod u+x configure
2. ./configure  
第二步:进入lib目录下执行make:
1. cd lib  
2. make
第三步:建立基础类库:

1. cd ../libfree  # continue building the basic library  
2. make  
第四步:编译函数库:

1. cd ../libgai   # the getaddrinfo() and getnameinfo() functions  
2. make  

在执行上述代码的第三步的时候会如果遇到如下错误

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:60:9: error: argument ‘size’ doesn’t match prototype
  size_t size;
         ^~~~
In file included from inet_ntop.c:27:
/usr/include/arpa/inet.h:64:20: error: prototype declaration
 extern const char *inet_ntop (int __af, const void *__restrict __cp,
                    ^~~~~~~~~
make: *** [<builtin>: inet_ntop.o] Error 1

解决方法在inet_ntop.c中加入以下代码:

#define size_t socklen_t

4,将生成的libunp.a静态库复制到/usr/lib/和/usr/lib64/中。

cd ..   //回到unpv12e目录  

1. sudo cp libunp.a /usr/lib  
2. sudo cp libunp.a /usr/lib64  

5,修改unp.h并将其和config.h拷贝到/usr/include中,为了以后include方便

gedit lib/unp.h   //将unp.h中#include "../config.h"修改为#include "config.h"  
1. sudo cp lib/unp.h /usr/include  
2. sudo cp config.h /usr/include  

6,编译源代码

1. cd ./intro  
2. gcc daytimetcpcli.c -o daytimetcpcli -lunp