《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 Mar  2 18:51:06 2018

你可能感兴趣的:(《Unix网络编程》第一卷第三版 源码编译)