原文地址:http://blog.csdn.net/a649518776/article/details/6724121

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

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

搭建unix网络编程环境

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

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

[python] view plaincopy
  1. sudo apt-get install build-essential

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

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

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

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

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

[python] view plaincopy
  1. ./configure

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

[python] view plaincopy
  1. cd lib
[python] view plaincopy
  1. make  //这一步我出错了

错误代码为:

[python] view plaincopy
  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注释掉就行了.

注释掉之后重新

[python] view plaincopy
  1. make //build the basic library that all programs need

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

第三步:这一步没有问题

[python] view plaincopy
  1. cd ../libfree  # continue building the basic library
  2. make

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

[python] view plaincopy
  1. cd ../libgai   # the getaddrinfo() and getnameinfo() functions
  2. make

错误提示如下:

[python] view plaincopy
  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目录:

[python] view plaincopy
  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
[python] view plaincopy
  1. autoconf
  2. ./configure
[python] view plaincopy
  1. gedit Make.defines

在文件末尾加上下面这句:
CFLAGS = -g -O2 -D_REENTRANT -Wall -D_GNU_SOURCE

然后重新执行代码:

[python] view plaincopy
  1. cd libgai  # continue building the basic library
  2. make

ok,问题解决了!

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

[html] view plaincopy
  1. cd ..   //回到unpv12e目录
[html] view plaincopy
  1. sudo cp libunp.a /usr/lib
  2. sudo cp libunp.a /usr/lib64

5,修改unp.h并将其和config.h拷贝到/usr/include中,为了以后include方便

[python] view plaincopy
  1. gedit lib/unp.h   //将unp.h中#include "../config.h"修改为#include "config.h"
[python] view plaincopy
  1. sudo cp lib/unp.h /usr/include
  2. sudo cp config.h /usr/include

6,编译源代码

[python] view plaincopy
  1. cd ./intro
  2. gcc daytimetcpcli.c -o daytimetcpcli -lunp

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

7,编写程序

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

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

转载于:https://www.cnblogs.com/NeilHappy/archive/2012/11/06/2756739.html

Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)(转载)相关推荐

  1. LNMP架构环境搭建之PHP、Nginx源码编译安装及其简单配置应用

    LNMP架构中的Mysql见上一篇博文"LNMP架构环境搭建之mysql源码编译安装" 一.PHP简介 PHP(外文名:PHP: Hypertext Preprocessor,中文 ...

  2. The Things Network LoRaWAN Stack V3 学习笔记 1.2 源码编译

    前言 源码编译是重头戏,这节笔记记录如何使用 make 命令编译相关部件.由于部分包在墙外,带来了一点麻烦,还分享一个 replace 方式来翻墙的办法. 小能手这段时间在学习 The Things ...

  3. The Things Network LoRaWAN Stack V3 学习笔记 1.2 源码编译 - 190821

    文章目录 前言 1 依赖包替换 2 编译准备 3 编译 3.1 cli 编译 3.2 stack 编译 3.3 前端编译 END 前言 源码编译是重头戏,这节笔记记录如何使用 make 命令编译相关部 ...

  4. 瑞芯微RK3568开发板源码编译与交叉编译环境搭建

    本篇,将进行OK3568-C开发板Linux系统开发需要用的软件交叉编译环境的配置.下面就介绍两种交叉编译环境的配置方法. 01C/C++交叉编译环境编译 如果只是使用C/C++代码,则在自己的Ubu ...

  5. 基于Centos7.5源码编译搭建LAMP架构

    简介LAMP源码编译搭建LAMP架构 为什么要源码编译 一般来说,我们软件的安装方式有Yum(rpm),和源码编译两种方式,那么为什么我们需要源码编译安装一部分软件?选择源码编译安装软件有以下几个原因 ...

  6. LAMP架构搭建明细,源码编译安装

    LAMP架构搭建明细 LAMP概述 Apache源码编译 Mysql源码编译 PHP源码编译 LAMP概述 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写 Linux,操 ...

  7. Unix 编程三件套环境搭建

    是的,我说的unix编程三件套如图所示,如果有正在看这三本书之一的朋友,欢迎阅读本文章,希望能对你有帮助,该文章帮你总结好了<unix环境高级编程>的apue.h,<卷二unix进程 ...

  8. 《网络编程》关于 UNIX网络编程 卷1 的 unp.h 和源码编译问题

    本文针对<网络编程 卷1>unp.h 头文件及其编译问题进行记录,本书源码下载地址http://www.unpbook.com 首先进行编译,在目录 unpv13e下依次执行以下步骤: . ...

  9. LNMP架构环境搭建之mysql源码编译安装

    Mysql MySQL是一个开源的数据库,在互联网行业应用的很广泛,下面来记录一下从源码编译安装的步骤,当然,MySQL也有其他安装方式,比如,使用yum下载安装rpm包,或者二进制方式安装,如果机器 ...

最新文章

  1. 第 138 章 Spark
  2. 吃鸡2019年5月7日服务器维护,绝地求生正式服5月17日停机更新维护多久到几点
  3. 通道注意力新突破!从频域角度出发,浙大提出FcaNet:仅需修改一行代码,简洁又高效
  4. Django 模型 —— 字段类型
  5. C# 页面调用控制台应用程序
  6. 陶哲轩实分析习题9.1.1
  7. EJB继承与Java继承不同
  8. gram矩阵_Skip-gram
  9. JS 数据结构之旅 :通过JS实现栈、队列、二叉树、二分搜索树、AVL树、Trie树、并查集树、堆
  10. 形态学运算中腐蚀,膨胀,开运算和闭运算
  11. 剑指Offer字符串加法问题
  12. vf省计算机考试题库,计算机二级VF上机题库及答案
  13. python我想对你说_python学习22天----模块、包
  14. Java框架总结(高淇java300集+入门笔记)
  15. TypeScript——理解 infer 关键字!
  16. 如何将lvm卷移动到另一台服务器中
  17. sqlserver实现抽奖Demo
  18. MyBatis框架的优缺点及其适用场合
  19. 阿里曾尝试回购雅虎所持阿里集团余下股份
  20. Oracle并发(CONCURREMT)收集统计信息 (文档 ID 1555451.1)

热门文章

  1. 支付宝服务商子商户_怎么成为支付宝刷脸支付服务商?
  2. 使用 file_get_contents 获取网站信息报错failed to open stream: HTTP request failed!
  3. android 图片转base64内存变大了_开发者最喜爱的图片编码格式:opencv编码,解码,显示base64图片...
  4. linux7 vnc看不到桌面,VNC Viewer轻松连接远程CentOS7桌面
  5. Java对象内存布局
  6. websocket php MySQL_PHP写了一个websocket服务,mysql连接实例丢失问题怎么解决?
  7. python控制gpio产生固定数量的脉冲_STM32L151用dma控制GPIO口发出指定的脉冲个数的疑惑!...
  8. android onresume函数,android – 使用onResume()刷新活动
  9. 改变变压器联接方式可消除某些特定次数的谐波_电工牛人10年经验,总结的4电工常用接线方法41例,电机、变压器、接触器..都有...
  10. 未能找到元数据文件_Flink 源码:Checkpoint 元数据详解