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
- sudo apt-get install build-essential
2,下载本书的头文件及示例源码
unpv12e.tar.gz(这个编译有问题)unpv13e.tar.gz下不了,可以google一下。
(下载使用unpv13e的话,3中解决问题的地方就可以略过了)
3,解压unpv12e.tar.gz后进入目录查看README,然后可以按照里面提示操作,不过会遇到问题
第一步:在终端中进入upnv12e目录,然后执行代码:
- ./configure
第二步:这里有问题及解决方法
- cd lib
2.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: error: redefinition of ‘struct in_pktinfo’
- make: *** [connect_nonb.o] 错误 1
redefinition of ‘struct in_pktinfo’的解决方法如下:
结构in_pktinfo已经包含在标准头文件bits/in.h中了, 它又通过 netinet/in.h 在unp.h中被包括进来. 只要将 unp.h 中的结构定义comment out注释掉就行了.
注释掉之后重新
- make //build the basic library that all programs need
这次就成功了!生成了../libunp.a文件。
第三步:这一步没有问题
- cd ../libfree # continue building the basic library
- make
第四步:这步解决方法麻烦一点
- cd ../libgai # the getaddrinfo() and getnameinfo() functions
- make
错误提示如下:
- gcc -g -O2 -D_REENTRANT -Wall -c -o getaddrinfo.o getaddrinfo.c
- getaddrinfo.c: In function ‘getaddrinfo’:
- getaddrinfo.c:58: error: ‘EAI_ADDRFAMILY’ undeclared (first use in this function)
- getaddrinfo.c:58: error: (Each undeclared identifier is reported only once
- getaddrinfo.c:58: error: for each function it appears in.)
- getaddrinfo.c:116: error: ‘EAI_NODATA’ undeclared (first use in this function)
- make: *** [getaddrinfo.o] 错误 1
解决方法如下:
回到unpv12e目录:
- cd ..
- gedit configure.in
找到下面一行注释掉
LIBGAI_OBJS="getaddrinfo.o getnameinfo.o freeaddrinfo.o gai_strerror.o"
然后用下面的代码代替注释掉的那行
- LIBGAI_OBJS=
- if test "$ac_cv_func_getaddrinfo" = no ; then
- LIBGAI_OBJS="$LIBGAI_OBJS getaddrinfo.o"
- fi
- if test "$ac_cv_func_getnameinfo" = no ; then
- LIBGAI_OBJS="$LIBGAI_OBJS getnameinfo.o"
- fi
- if test "$ac_cv_func_freeaddrinfo" = no ; then
- LIBGAI_OBJS="$LIBGAI_OBJS freeaddrinfo.o"
- fi
- if test "$ac_cv_func_gai_strerror" = no ; then
- LIBGAI_OBJS="$LIBGAI_OBJS gai_strerror.o"
- fi
- autoconf
- ./configure
- gedit Make.defines
在文件末尾加上下面这句:
CFLAGS = -g -O2 -D_REENTRANT -Wall -D_GNU_SOURCE然后重新执行代码:
- cd libgai # continue building the basic library
- make
ok,问题解决了!
4,将生成的libunp.a静态库复制到/usr/lib/和/usr/lib64/中。
- cd .. //回到unpv12e目录
- sudo cp libunp.a /usr/lib
- sudo cp libunp.a /usr/lib64
5,修改unp.h并将其和config.h拷贝到/usr/include中,为了以后include方便
- gedit lib/unp.h //将unp.h中#include "../config.h"修改为#include "config.h"
- sudo cp lib/unp.h /usr/include
- sudo cp config.h /usr/include
6,编译源代码
- cd 你的程序目录
- gcc daytimetcpcli.c -o daytimetcpcli -lunp
跟普通的编译不一样的是要在最后加上刚才那个链接库,-l参数加上刚才那个libunp.a去掉lib和后面的.a。最后得到参数-lunp。
7,编写程序
以后编写完的程序安装6中的代码编译就行了,然后代码可以完全跟书上的一样。代码编辑器或IDE等就按自己的喜好来选了。这个网上很多c语言编程环境搭建教程。
我选择命令行用vim来编写程序,主要为了锻炼一下自己。
现在借鉴网上的,自己测试成功,后来有问题,我会陆续补上来,跟大家分享。
Unix NetWork Programming(unix环境编程)——环境搭建(解决unp.h等源码编译问题)的更多相关文章
- 【转】Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)
下面开始用简单但典型的客户端和服务器端程序说明如何进行网络编程.这一小节讲的是客户端,一个用来连接并读取服务器发送来的时间的客户端. 这里涉及到了编写代码,因此要 搭建unix网络编程环境 unix系 ...
- Spark环境搭建(六)-----------sprk源码编译
想要搭建自己的Hadoop和spark集群,尤其是在生产环境中,下载官网提供的安装包远远不够的,必须要自己源码编译spark才行. 环境准备: 1,Maven环境搭建,版本Apache Maven 3 ...
- 大数据平台搭建 - cdh5.11.1 - spark源码编译及集群搭建
一.spark简介 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎,Spark 是一种与 hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同 ...
- 年终福利,PHP7+Apache2.4+MySQL5.6 源码编译安装,环境配置,搭建你自己的LAMP环境
PHP7 都出来了,你还在玩PHP5吗? MySQL5.6 早都出来了,你还在玩MySql5.2吗? Apache2.4 早都出来了,你还在玩Apache2.2吗? 笔者不才,愿意亲自搭建环境,供搭建 ...
- 基于源码编译的lnmp架构实现论坛的搭建及memcache的应用
系统环境: RHEL6 x86-64 selinux and iptables disabled LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构 Linux是一类 ...
- 【转】【Raspberry Pi】Unix NetWork Programming:配置unp.h头文件环境
一.初衷 近期正在做网络计算编程的作业.要求平台为unix/linux,想着Raspberry Pi装的Debian系统也是Linux改的,也应该能够勉强用着,所以就用它来做作业了! 二.说明 先把环 ...
- 源码编译搭建LNMP环境
LNMP源码编译 1.LNMP介绍 LNMP=Linux Nginx Mysql PHP Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器.Ng ...
- 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)
写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...
- CentOS6.5下搭建LAMP环境(源码编译方式)
CentOS 6.5安装配置LAMP服务器(Apache+PHP5+MySQL) 学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP ,WAMP,MAMP等.这里我介 ...
随机推荐
- 转载利用伪元素单个颜色实现 hover 和 active 时的明暗变化效果
1.颜色小tip知识 在背景色上方叠加一个黑色半透明层 rgba(0,0,0,.2) 可以得到一个更暗的颜色 在背景色上方叠加一个白色半透明层 rgba(255,255,255,.2) 可以得到一个更 ...
- nodejs 命令行、自定义
一.必备插件 1. babel:es6语法支持,需要babel-perset-es2015(转换成es5执行).babel.babel-core(程序执行) 2. commander:自定义命令插件, ...
- Linux下安装使用Solr
Linux下安装使用Solr 1.首先下载Solr.mmseg4j分词包.tomcat并解压,这用google.百度都可以搜索得到下载地址. 2.因为要使用到中文分词,所以要设置编码,进入tomcat ...
- Android 手机卫士--确认密码对话框编写
本文接着实现“确认密码”功能,也即是用户以前设置过密码,现在只需要输入确认密码 本文地址:http://www.cnblogs.com/wuyudong/p/5940718.html,转载请注明出处. ...
- 安卓开发之ListAdapter(一)
Adapter常用来管理数据,是连接后端数据和前端显示的适配器接口,是数据和UI(view)之间一个重要的纽带.再常见的view(listview.gridview)等地方都需要用到adapter,下 ...
- 【Swift 2.0】实现简单弹幕功能
前言 简单实现弹幕功能,表跟我谈效率,但也有用队列控制同时弹的数量. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over ...
- JDBC快速入门
/** * JDBC快速入门: * 1.导入jar包 数据库驱动 * 2.注册驱动 * 3.获取数据库连接对象 Connection * 4.定义sql语句 * 5.获取发送执行sql语句的对象 St ...
- Mac使用极简教程
最近领导让我写一篇关于Mac的使用教程,因为使用人群未知,所以尽量写的通俗易懂,可谓是关于Mac电脑使用的精简教程吧,在此发表出来以供参考. Mac因为安全性而闻名,我们拥有了一部Mac,那么我们来了 ...
- CocoaPods 导入第三方库头文件自动补齐
使用了一段时间CocoaPods来管理Objective-c的类库,方便了不少.但是有一个小问题,当我在xcode输入import关键字的时候,没有自动联想补齐代码的功能,需要手工敲全了文件名,难以适 ...
- 编写Javascript类库(jQuery版) - 进阶者系列 - 学习者系列文章
这些年主要关注于项目管理方面的工作,编码就比较少了.这几天比较空闲,就想把原来的经验沉淀下来,一个是做好记录,以后如果忘记了还能尽快找回来,第二个是写写博文,算是练练手笔吧. 言归正传,这次写的是Ja ...