《Unix网络编程》第一卷第三版|《Unix网络编程》第一卷第三版 源码编译

【《Unix网络编程》第一卷第三版|《Unix网络编程》第一卷第三版 源码编译】操作系统:

操作系统: Ubuntu 16.04

  1. unpv13e/libfree目录下 make报错
inet_ntop.c:60:9: error: argument ‘size’ doesn’t match prototype size_t size; ^ In file included from inet_ntop.c:27:0: /usr/include/arpa/inet.h:64:20: error: prototype declaration extern const char *inet_ntop (int __af, const void *__restrict __cp, ^ : recipe for target 'inet_ntop.o' failed make: *** [inet_ntop.o] Error 1

错误提示inet_ntop.c中60行声明与原型申明/usr/include/arpa/inet.h不匹配。(#include一般所在文件都在/usr/include中)
经查验,最后一个参数,在inet.h中定义socklen_t,而inet_ntop.c中定义为size_t。在inet_ntop.c中加入如下代码即可:(插入到所有头文件之后)
#define size_t socklen_t

  1. unpv13e/libroute目录下 make
gcc -I../lib -g -O2 -D_REENTRANT -Wall-c -o get_rtaddrs.o get_rtaddrs.c In file included from get_rtaddrs.c:1:0: unproute.h:3:45: fatal error: net/if_dl.h: No such file or directory compilation terminated.

解决方法: 下载if_dl.h 放到/usr/include/net/下
  1. 同2目录下,make报错
get_rtaddrs.c: In function ‘get_rtaddrs’: get_rtaddrs.c:21:18: error: ‘RTAX_MAX’ undeclared (first use in this function) for (i = 0; i < RTAX_MAX; i++) { ^ get_rtaddrs.c 中RTAX_MAX变量未声明,在/libroute/unproute.h 加 #define RTAX_MAX 1024

还会报其他错误,其实看到README,才知道基于BSD的系统才用编译这个。自己的系统是基于Linux的Ubuntu系统,所以不用编译这个。
解决以上问题以后,可以运行第一份代码,起一个响应服务器时间的server。
#intro/目录下 启动server $ make daytimetcpsrv $ sudo ./daytimetcpsrv #另起一个terminal,启动client $ ./daytimetcpcli 127.0.0.1 Fri Mar2 18:51:06 2018

    推荐阅读