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

此配置实例亲测成功,共勉,有问题大家留言。

环境:VMware 10 + unbuntu 14.04

为了unix进行网络编程,编程第一个unix程序时遇到的问题,不能包含unp.h文件,这个感觉和apue.h差不多,不过这里需要编译源代码,为了以后方便,现在整理如下:

主要有两点一是生成libunp.a这个库,二是得到unp.h、config.h这两个个头文件。

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

  1. sudo apt-get install build-essential

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

unpv12e.tar.gz(这个编译有问题)unpv13e.tar.gz下不了,可以google一下。

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

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

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

  1. ./configure

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

  1. cd lib

2.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 你的程序目录
  2. gcc daytimetcpcli.c -o daytimetcpcli -lunp

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

7,编写程序

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

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

现在借鉴网上的,自己测试成功,后来有问题,我会陆续补上来,跟大家分享。

时间: 2024-10-25 03:49:23

Unix NetWork Programming(unix环境编程)——环境搭建(解决unp.h等源码编译问题)的相关文章

unix网络编程卷1:套接字联网 源码编译

QUICK AND DIRTY Execute the following from the src/ directory: 一: ./configure # try to figure out all 结果是: ........ checking for struct addrinfo... yes checking for struct if_nameindex... yes checking for struct sockaddr_dl... no checking for struct

年终福利,PHP7+Apache2.4+MySQL5.6 源码编译安装,环境配置,搭建你自己的LAMP环境

PHP7 都出来了,你还在玩PHP5吗? MySQL5.6 早都出来了,你还在玩MySql5.2吗? Apache2.4 早都出来了,你还在玩Apache2.2吗? 笔者不才,愿意亲自搭建环境,供搭建参考.这里是源码安装的奥,什么一键安装包,什么yum安装,什么rpm安装都统统略过(笔者是一个自虐狂,就像windows下安装软件一样,不喜欢安装在默认的位置也就是C盘了,否则系统盘就爆了) 安装之前了,要说明下,要保证PHP在最后安装,原因后面揭晓.安装任何一个软件之前,都要确保它所依赖的库都安装

UNIX网络编程之旅-配置unp.h头文件环境

最近在学习Unix网络编程(UNP),书中steven在处理网络编程时只用了一个#include “unp.h”  相当有个性并且也很便捷 于是我把第三版的源代码编译实现了这个过程,算是一种个性化的开发环境的搭建吧,顺便把过程记录下来,以便自己以后查阅. 首先去网上找到源代码包unpv.13e.tar.gz 一找一大堆 解压缩到你的某个目录,unpv13e里面大致有这些目录 ├── aclocal.m4 ├── advio ├── bcast ├── config.guess ├── confi

源码编译搭建LAMP环境 

源码编译搭建LAMP环境  一.将 LAMP 相关软件包上传刡 linux 上 [[email protected] ~]# ls anaconda-ks.cfg      install.log         mysql-5.5.30.tar.gz  公共的  视频  文档  音乐 httpd-2.2.25.tar.gz  install.log.syslog  php-5.4.14.tar.bz2   模板    图片  下载  桌面 1. 安装apache [[email protect

CentOS6.5下搭建LAMP环境(源码编译方式)

CentOS 6.5安装配置LAMP服务器(Apache+PHP5+MySQL) 学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP ,WAMP,MAMP等.这里我介绍一下LAMP环境的搭建,即Linux. Apache. MySQL .PHP环境. 一.首先安装操作系统 操作系统:centos6.5 操作系统安装步骤,此处不再详述. 备注:服务器系统采用最小化安装,安装一下GCC编译工具和一个桌面即可.如下图所示: 由于安装系统的时候我是最小化安装,只安装了一

UNIX网络编程卷2 源码编译篇

W. Richard Stevens的主页: 源代码下载   >>  ~/Downloads/unpv22e.tar.gz; 1 tar -xzfv unpv22e.tar.gz 2 cd unpv22e 3 ./configure 4 cd lib 5 make make编译失败,因为需要对两个文件修改,unpv22e/config.h和unpv22e/wrapunix.c. 1 vi config.h 2 3 /*注释掉这三行*/ 4 // #define uint8_t unsigned

Unix网络编程第三版源码编译

配置: $ cd Unix-Network-Programming/ $ chmod 755 configure $ ./configure 主要的工作是检查系统是否有源码编译所依赖的各种资源(系统版本是否匹配.编译器.库文件.头文件以及结构体定义等等) checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking for

CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境

什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/Perl/Python组合成的动态Web应用程序和服务器,它是一组Web应用程序的基础软件包,在这个基础环境上我们可以搭建任何使用PHP/Perl/Python等语言的动态网站,如商务网站.博客.论坛和开源Web应用程序软件等,它是互联网上被广泛使用的Web网站架构之一. 部署方式 从网站规模大小(访问流量.注册用户等)角度来看,LNMP架构可以使用单机部署方式和集群部署方式.单机部

源码编译安装lnmp环境

一.源码编译安装步骤 首先说明源码安装的好处   速度快,可自定义路径 主要有三步:1.配置 进入源码安装包  ./configure --prefix=/uer/local/nginx  可指定参数--prefix为安装路径2.编译 相当于rpm包  make3.安装 make install 如果安装出错,先清楚一下 make clean,然后重新配置编译安装 二.安装nginx 1.安装可能需要的依赖环境, yum -y install libxml2-devel gd-devel lib