环境macos 10.14
1.下载必须的安装包unpv13e
下载地址http://www.unpbook.com/src.html
2.解压后在终端通过命令进入unpv13e文件夹,依次执行下列命令
./configure
cd lib
make
cd../libfree
make
在libfree下make报错
inet_ntop.c:56:1: error: conflicting types for ‘inet_ntop’
解决办法:
在unpv13e/libfree下找到inet_ntop.c文件把#include <arpa/inet.h>注释掉
然后在unpv13e文件夹中成功生成libunp.a文件
3.将生成的libunp.a文件复制到usr/lib文件夹中,并且将unpv13e下的config.h和修改后的unpv13e/lib中的unp.h复制到usr/include文件夹中
- 首先将unp.h中的#include "…/config.h"修改为#include “config.h” ,因为unp.h和config.h都放入usr/include中
- 执行命令:(都是在unpv13e文件夹中)
sudo cp libunp.a /usr/lib
sudo cp lib/unp.h /usr/include
sudo cp config.h /usr/include
- 执行过程中可能会遇到的问题
- Operation not permitted:
是因为rootless机制未关闭,解决方法:
重启Mac,开机时长按command+R进入恢复模式,在上面的实用工具中找到teriminal/终端,输入
csrutil disable
关闭rootless机制;要再开启输入csrutil enable即可 - usr/include文件夹找不到:
可能是command line Tools未安装,但若执行xcode-select --install安装后仍未解决,参考我之前写的>https://blog.csdn.net/Harlod/article/details/85725912
- Operation not permitted:
4.若前面都已经成功,确认libunp.a,unp.h,config.h都已经拷贝到相应文件夹下,开始编译第一个例子daytimetcpcli.c;在unpv13e文件夹下,依次执行相应命令:
cd intro
gcc daytimetcpcli.c -lunp
注意:编译时必须加上静态链接库:-l 参数加上 libunp.a 去掉lib和后面的.a。最后得到参数-lunp
成功则在intro文件夹下生成了可执行文件a.out,测试:
./a.out 127.0.0.1
这时返回错误
该错误表示 daytime 服务程序没开,解决方法:
新建一个终端窗口在unpv13e/intro下编译daytimetcp服务器程序并已管理员身份运行
gcc daytimetcpsrv.c -o daytimetcpsrv -lunp
sudo ./daytimetcpsrv
此时再次执行 ./a.out 127.0.0.1 返回成功
参考:
ps.在这上面真是浪费了太多时间,我把搭建过程和遇到的所有问题都列出来希望能对大家有用