Unix NetWork Programming -- 环境搭建,Ubuntu 12.04 x86_64

1. 下载源代码:http://www.ituring.com.cn/book/download/60498ad9-ede6-4023-a92b-04d47be23578

2. 解压文件后进入文件根目录并运行以下命令:

$ autoconf
$ ./configure

3. 进入lib目录并且make

4. 进入libfree目录并且make

在该目录运行时出现错误,错误代码如下:

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
/usr/include/arpa/inet.h:65:22: error: prototype declaration
make: *** [inet_ntop.o] Error 1

经过查询inet_ntop.c 和 inet.h 文件发现在头文件中inet_ntop的原型声明与inet_ntop.c中的该函数实现原型的第三个参数类型不一致

inet.h 和 inet_ntop.c中的函数原型如下:

//inet.h
__const char *inet_ntop (int __af, __const void *__restrict __cp, char *__restrict __buf, socklen_t __len) __THROW;
//inet_ntop.c
const char *
inet_ntop(int af, const void *src, char *dst, size_t size);

其中第三个参数类型分别为socklen_t和size_t,解决方案为在inet_ntop.c中加入以下代码:

#define size_t socklen_t

5. 编译完成后将编译输出的libunp.a拷贝到库文件目录(/usr/lib 和 /usr/lib64)中去:

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

6. 修改头文件unp.h和config.h拷贝到头文件目录中去(/usr/include)

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

7. 编译测试源代码

cd ./intro  
gcc daytimetcpcli.c -o daytimetcpcli -lunp
gcc daytimetcpsrv.c -o daytimetcpsrv -lunp