linux安装UNIX网络编程源代码
来源:互联网 发布:淘宝评论领券是真的吗 编辑:程序博客网 时间:2024/06/03 03:09
unix系统我没安装,系统不易获得而且也没必要安装unix。用linux是最佳选择。再者我本来就是ubuntu系统,所以就在ubuntu下搭建环境了。
1,安装编译器,为了齐全还是安装一下build-essential
- sudo
apt-get install build-essential
2,下载本书的头文件及示例源码
点此下载unpv12e.tar.gz(这个编译有问题)点此下载unpv13e.tar.gz(这个经itnovice回复中告诉我已经解决了错误,所以最好用这个,能节省很多时间)
(下载unpv13e的话,3中解决问题的地方就可以略过了)
3,解压unpv12e.tar.gz后进入目录查看README,然后可以按照里面提示操作,不过会遇到问题
第一步:在终端中进入upnv12e目录,然后执行代码:
- ./configure
第二步:这里有问题及解决方法
- 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:
error: redefinition of ‘struct in_pktinfo’ - make:
*** [connect_nonb.o] 错误 1 redefinition of ‘structin_pktinfo’的解决方法如下:
结构in_pktinfo已经包含在标准头文件bits/in.h中了, 它又通过netinet/in.h 在unp.h中被包括进来. 只要将 unp.h 中的结构定义commentout注释掉就行了.
注释掉之后重新
- 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.ogetnameinfo.o freeaddrinfo.ogai_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 然后重新执行代码:
[python] view plaincopy
- 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
- 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
./intro - gcc
daytimetcpcli.c -o daytimetcpcli -lunp
跟普通的编译不一样的是要在最后加上刚才那个链接库,-l参数加上刚才那个libunp.a去掉lib和后面的.a。最后得到参数-lunp。
- linux安装UNIX网络编程源代码
- UNIX网络编程 源代码 使用方法
- 编译UNIX网络编程源代码
- unix网络编程源代码编译
- Linux/UNIX网络编程
- 【Linux】UNIX网络编程
- UNIX网络编程 卷2 源代码使用
- UNIX网络编程 卷2 源代码使用
- UNIX网络编程 卷2 源代码使用
- Unix网络编程卷1源代码使用
- Unix网络编程 源代码编译问题
- UNIX网络编程 卷2 源代码使用
- unix网络编程源代码环境搭建
- Unix/Linux系统网络编程
- Unix网络编程 卷2:进程间通信(linux环境下源代码使用)
- Linux/Unix网络编程指南(Socket 编程)
- Linux/Unix网络编程指南(Socket 编程)
- Unix/Linux 编程:网络编程之一 Socket
- Android中BindService方式使用的理解
- 球面如何切分成多个扇面?
- 最近的感想
- ultraedit 显示所有的标签页
- Python动态类型,怎么判断是输入数据的合法性?
- linux安装UNIX网络编程源代码
- 支持多浏览器的复制内容功能JS
- linux 下串行口超时设置
- 关于Android中代码修改某个布局的背景问题
- Android“This Handler class should be static or leaks might occur”警告的处理方法
- Java在src目录下加载配置文件的方法
- 【C语言】linux下c语言 客户端服务器编程框架
- 一条命令卸载Xcode和iPhone SDK
- UINavigationBar自定义背景以及按钮