MacOS10下 UNIX网络编程环境搭建(解决缺失unp.h等问题)及第一个例子daytimetcpcli.c编译运行

 环境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
  • 执行过程中可能会遇到的问题
    1. Operation not permitted:
      是因为rootless机制未关闭,解决方法:
      重启Mac,开机时长按command+R进入恢复模式,在上面的实用工具中找到teriminal/终端,输入
      csrutil disable
      关闭rootless机制;要再开启输入csrutil enable即可
    2. usr/include文件夹找不到:
      可能是command line Tools未安装,但若执行xcode-select --install安装后仍未解决,参考我之前写的>https://blog.csdn.net/Harlod/article/details/85725912

 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 返回成功
在这里插入图片描述

参考:

https://www.jianshu.com/p/7e395e4f8515

ps.在这上面真是浪费了太多时间,我把搭建过程和遇到的所有问题都列出来希望能对大家有用

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值