Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)

UNIX网络编程—SCTP编译运行错误及解决 阅读详情

下面开始用简单但典型的客户端和服务器端程序说明如何进行网络编程。这一小节讲的是客户端,一个用来连接并读取服务器发送来的时间的客户端。

这里涉及到了编写代码,因此要

搭建unix网络编程环境


unix系统我没安装,系统不易获得而且也没必要安装unix。用linux是最佳选择。再者我本来就是ubuntu系统,所以就在ubuntu下搭建环境了。

1,安装编译器,为了齐全还是安装一下build-essential

  1. sudo apt-get install build-essential  

2,下载本书的头文件及示例源码

点此下载unpv12e.tar.gz(这个编译有问题)点此下载unpv13e.tar.gz(这个经itnovice回复中告诉我已经解决了错误,所以最好用这个,能节省很多时间)


(下载unpv13e的话,3中解决问题的地方就可以略过了)

3,解压unpv12e.tar.gz后进入目录查看README,然后可以按照里面提示操作,不过会遇到问题

第一步:在终端中进入upnv12e目录,然后执行代码:

  1. ./configure  


第二步:这里有问题及解决方法

  1. cd lib  


  1. make  //这一步我出错了  


错误代码为:

  1. gcc -g -O2 -D_REENTRANT -Wall   -c -o connect_nonb.o connect_nonb.c  
  2. In file included from connect_nonb.c:1:  
  3. unp.h:114: error: redefinition of ‘struct in_pktinfo’  
  4. make: *** [connect_nonb.o] 错误 1  

redefinition of ‘struct in_pktinfo’的解决方法如下: 

结构in_pktinfo已经包含在标准头文件bits/in.h中了, 它又通过 netinet/in.h 在unp.h中被包括进来. 只要将 unp.h 中的结构定义comment out注释掉就行了. 

注释掉之后重新

  1. make //build the basic library that all programs need  


这次就成功了!生成了../libunp.a文件。


第三步:这一步没有问题

  1. cd ../libfree  # continue building the basic library  
  2. make  


第四步:这步解决方法麻烦一点

  1. cd ../libgai   # the getaddrinfo() and getnameinfo() functions  
  2. make  
错误提示如下:

  1. gcc -g -O2 -D_REENTRANT -Wall   -c -o getaddrinfo.o getaddrinfo.c  
  2. getaddrinfo.c: In function ‘getaddrinfo’:  
  3. getaddrinfo.c:58: error: ‘EAI_ADDRFAMILY’ undeclared (first use in this function)  
  4. getaddrinfo.c:58: error: (Each undeclared identifier is reported only once  
  5. getaddrinfo.c:58: error: for each function it appears in.)  
  6. getaddrinfo.c:116: error: ‘EAI_NODATA’ undeclared (first use in this function)  
  7. make: *** [getaddrinfo.o] 错误 1  

解决方法如下:

回到unpv12e目录: 

  1. cd ..  
  2. gedit configure.in   
找到下面一行注释掉
LIBGAI_OBJS="getaddrinfo.o getnameinfo.o freeaddrinfo.o gai_strerror.o"
然后用下面的代码代替注释掉的那行

  1. LIBGAI_OBJS=
  2. if test "$ac_cv_func_getaddrinfo" = no ; then
  3. LIBGAI_OBJS="$LIBGAI_OBJS getaddrinfo.o"
  4. fi
  5. if test "$ac_cv_func_getnameinfo" = no ; then
  6. LIBGAI_OBJS="$LIBGAI_OBJS getnameinfo.o"
  7. fi
  8. if test "$ac_cv_func_freeaddrinfo" = no ; then
  9. LIBGAI_OBJS="$LIBGAI_OBJS freeaddrinfo.o"
  10. fi
  11. if test "$ac_cv_func_gai_strerror" = no ; then
  12. LIBGAI_OBJS="$LIBGAI_OBJS gai_strerror.o"
  13. fi
  1. autoconf  
  2. ./configure  
  1. gedit Make.defines   
在文件末尾加上下面这句:
CFLAGS = -g -O2 -D_REENTRANT -Wall -D_GNU_SOURCE

然后重新执行代码:

  1. cd libgai  # continue building the basic library  
  2. make  

ok,问题解决了!

4,将生成的libunp.a静态库复制到/usr/lib/和/usr/lib64/中。

  1. cd ..   //回到unpv12e目录  
  1. sudo cp libunp.a /usr/lib  
  2. sudo cp libunp.a /usr/lib64  


5,修改unp.h并将其和config.h拷贝到/usr/include中,为了以后include方便
  1. gedit lib/unp.h   //将unp.h中#include "../config.h"修改为#include "config.h"  
  1. sudo cp lib/unp.h /usr/include  
  2. sudo cp config.h /usr/include  

6,编译源代码
  1. cd ./intro  
  2. gcc daytimetcpcli.c -o daytimetcpcli -lunp  

跟普通的编译不一样的是要在最后加上刚才那个链接库,-l参数加上刚才那个libunp.a去掉lib和后面的.a。最后得到参数-lunp。

7,编写程序

以后编写完的程序安装6中的代码编译就行了,然后代码可以完全跟书上的一样。代码编辑器或IDE等就按自己的喜好来选了。这个网上很多c语言编程环境搭建教程。

我选择命令行用vi编写程序,主要为了锻炼一下自己。

达摩院高清人像美肤模型ABPN的深入解析及编程实现 本文深入解析了达摩院高清人像美肤模型ABPN的原理,并提供了相应的源代码实现。ABPN模型通过自适应的反投影网络,有效地实现了人像图像的美肤处理。通过进一步的研究和优化,ABPN模型有望在人像美肤领域发挥更大的作用。低频特征提取器用于提取输入图像的低频信息,而反投影网络则负责将低频信息与原始图像结合,生成美肤后的输出图像。通过将输入图像送入ABPN模型,即可得到经过美肤处理后的输出图像。通过对输入图像进行美肤处理,可以有效地去除皮肤上的瑕疵和噪点,提升图像质量和美感。 阅读详情

相关推荐

DINOv3 网络结构解析:从 ViT 到 ConvNeXt 的双路线设计

本文深入解析了DINOv3网络结构的双路线设计,包括ViT和ConvNeXt两种主干架构。ViT路线通过轴向旋转位置编码解决了传统ViT对固定分辨率的依赖,而ConvNeXt路线则优化了卷积设计,提升了实时处理能力。文章还探讨了Gram Anchoring、混合自监督目标等关键技术,展示了DINOv3在多任务和多模态应用中的强大潜力。

weixin_29214199的博客 563

Unix Network Programming 2nd Edtion Source Code 编译问题解决

按照README的指示走 #cd unpv12e #cd lib #make gcc -g -O2 -D_REENTRANT -Wall -c -o connect_nonb.o connect_nonb.c In file included from connect_nonb.c:1: unp.h:114: redefinition of `struct in_pktinfo'

张亮校的专栏 839

Docker一键部署NextCloud+OnlyOffice:打造企业级私有云办公环境(含HTTPS配置)

本文详细介绍了如何使用Docker Compose一键部署NextCloud与OnlyOffice,构建安全、高效的企业级私有云办公平台。内容涵盖从架构设计、Docker编排配置、HTTPS证书自动化管理,到系统初始化、性能优化及高级功能扩展的全栈实战指南,帮助企业实现数据自主可控与高效的在线文档编辑协作。

Apple的专栏 1240

in6_pktinfo找不到的问题

在 Rocky Linux 中,struct in6_pktinfo 的定义位于头文件 ‌<netinet/in.h>‌ 中‌。该结构体用于 IPv6 套接字编程,通常与 IPV6_PKTINFO 套接字选项配合使用,用于获取或设置数据包的源地址和接口索引信息‌。‌平台差异‌:Windows 中类似结构体 IN6_PKTINFO 定义于 ws2ipdef.h‌4,但 Linux 环境需统一使用 <netinet/in.h>‌1。‌编译选项‌:部分旧版库需启用 _GNU_SOURCE 宏(通过。

hzz812503533的博客 408

AT32F403A ADC通道管理与转换模式实战解析

本文深入解析AT32F403A微控制器的ADC模块,重点阐述其通道管理机制与四种转换模式(序列模式、抢占自动转换模式、反复模式、分割模式)的实战应用。通过详细的配置步骤与代码示例,帮助开发者高效实现模拟数字转换,优化数据采集性能与系统响应。

sky77的博客 279

OpenPose 论文理解

OpenPose: Real-time multi-person keypoint detection library for body, face, hands, and foot estimation paper: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields link: OpenPose paper...

JustForYou的博客 2万+

【转】Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)

下面开始用简单但典型的客户端和服务器端程序说明如何进行网络编程。这一小节讲的是客户端,一个用来连接并读取服务器发送来的时间的客户端。 这里涉及到了编写代码,因此要 搭建unix网络编程环境   unix系统我没安装,系统不易获得而且也没必要安装unix。用linux是最佳选择。再者我本来就是ubuntu系统,所以就在ubuntu下搭建环境了。 1,安装编译器,为了齐全还是安装一下buil...

weixin_33729196的博客 96

Versal ACAP NoC实战:像理解计算机网络一样配置AXI NoC,打通PS与PL数据通路

本文深入探讨了Versal ACAP NoC的配置与优化,通过计算机网络类比解析NoC架构,详细介绍了在VD100开发板上配置AXI NoC实现PS与PL数据交互的实战步骤。文章涵盖NoC组件功能、Vivado配置技巧、性能优化方法及常见问题解决方案,帮助开发者高效打通Versal芯片的数据通路。

weixin_42665255的博客 291
上一篇: Linux 2.6内核中提高网络I/O性能的新方法-epoll
下一篇: DP,GA总结
otuhacker
博客等级 码龄18年 21粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值