编译第一个例子:
操作系统:
# uname -a
Linux localhost.localdomain 2.6.32-431.5.1.el6.x86_64 #1 SMP Wed Feb 12 00:41:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
#cat /proc/version
Linux version 2.6.32-431.5.1.el6.x86_64 (mockbuild@c6b10.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Wed Feb 12 00:41:43 UTC 2014
源码下载地址: http://www.unpbook.com/
打开网页, 点击 Source Code -> Gzipped tar file (905630 bytes)
获得下载文件 unpv13e.tar.gz
上传到服务器, 使用 tar -zxvf unpv13e.tar.gz 命令直接解压到当前目录
编译:
#cd unpv13e
#cat README
可以看到编译说明
按照编译说明执行
#./configure
成功后最后几行如下
configure: creating ./config.status
config.status: creating Makefile
config.status: creating Make.defines
config.status: creating config.h
#cd lib
#make
成功后最后几行如下:
a - write_fd.o
a - writen.o
a - writable_timeo.o
ranlib ../libunp.a
# cd ../libfree/
# make
本人下到的版本会出现报错:
gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o inet_ntop.o inet_ntop.c
inet_ntop.c: In function ‘inet_ntop’:
inet_ntop.c:61: error: argument ‘size’ doesn’t match prototype
/usr/include/arpa/inet.h:65: error: prototype declaration
make: *** [inet_ntop.o] Error 1
解决方案如下:
# vim inet_ntop.c
:60 (转到第60行)
把 size_t size; 改成 socklen_t size;
:wq (退出)
继续执行 #make
成功后显示:
a - in_cksum.o
a - inet_ntop.o
a - inet_pton.o
ranlib ../libunp.a
以上, 基本库算是编完了, 下面是编译例子
# cd ../intro
# make daytimetcpcli
gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o daytimetcpcli.o daytimetcpcli.c
gcc -I../lib -g -O2 -D_REENTRANT -Wall -o daytimetcpcli daytimetcpcli.o ../libunp.a -lpthread
成功, 使用#ls指令, 可以看到当前目录下出现可执行文件 daytimetcpcli
#./daytimetcpcli 127.0.0.1
下面显示这样就表示成功了:
# ./daytimetcpcli 127.0.0.1
26 NOV 2014 21:16:24 CST ( 系统当前时间 )
出现 # ./daytimetcpcli 127.0.0.1 connect error: Connection refused 的解决办法:
# cd /etc/xinetd.d/
#ls
发现没有xinetd 服务, 安装xinetd
# yum install xinetd
出现 Is this ok [y/N]: y(输入y)
出现
Installed:
xinetd.x86_64 2:2.3.14-39.el6_4
Complete!
后表示安装成功
# ls
chargen-dgram daytime-dgram discard-dgram echo-dgram rsync time-dgram
chargen-stream daytime-stream discard-stream echo-stream tcpmux-server time-stream
可以看到xinetd.d目录下出现上面列出的文件, 分别打开daytime-dgram和daytime-stream
第6行 disable = yes
改成 disable = no
保存, 退出文件编辑.
xinetd.d]# cd ..
etc]# cd init.d
init.d]# ls
可以在里面找到xinetd的执行文件( 和网上说的daytime不一样, 不知道是不是操作系统版本的原因)
执行 init.d]# ./xinetd start
显示 Starting xinetd: [ OK ] 表示成功
然后回到刚才的代码目录, 再执行# ./daytimetcpcli 127.0.0.1 就可以了.