本文来自和另一篇博客转载
再三声明,本文转载于另一篇博客 《编译UNP源码》,这里附上原文地址 https://blog.csdn.net/yao5hed/article/details/81055577
由于本人通过该博客成功编译了 UNP 源码,非常的想要将这篇博客转载出来给更多人看到,于是就有了这篇博客。
希望大家可以到原博客上给作者点个赞,谢谢大家:)
正文
读UNP需要用到官方的源码,记录一下折腾的记录。源码下载地址 http://www.unpbook.com
下载源码后,解压出文件夹 unpv13e
,cd进入后,依次进行下面操作。
./configure
cd lib
make
这两步没有问题,出现warning也不用管,然后是:
cd ../libfree
make
这里报错:
inet_ntop.c: In function ‘inet_ntop’:
inet_ntop.c:60:9: error: argument ‘size’ doesn’t match prototype
size_t size;
解决方法是把 size_t
改为 socklen_t
,然后编译通过。
本来是要编译 libroute
,但Linux不支持这个BSD的API,所以不处理,进行下一步:
cd ../libgai
make
将生成的 libunp.a
静态库复制到 /usr/lib/
和 /usr/lib64/
:
cd .. //回到 unpv13e 目录
sudo cp libunp.a /usr/lib
sudo cp libunp.a /usr/lib64
修改 unp.h
并将其和 config.h
拷贝到 /usr/include
中:
vim lib/unp.h //将 unp.h 中#include "../config.h"修改为#include "config.h"
sudo cp lib/unp.h /usr/include
sudo cp config.h /usr/include
编译书中的例子。注意:编译时必须加上静态链接库:-l
参数加上 libunp.a
去掉lib和后面的.a。最后得到参数 -lunp
:
cd ./intro
gcc daytimetcpcli.c -o daytimetcpcli -lunp
测试上面生成的可执行文件获取本机当前日期:
./daytimetcpcli 127.0.0.1
会出现以下错误:
connect error:Connection refused
解决:这需要先启动server,用上面同样的方法编译daytimetcpsrv.c生成daytimetcpsrv,然后开另一个终端,以管理员启动:
sudo ./daytimetcpsrv
再到另一个终端启动daytimetcpcli,运行正常,结果: