最近学习这两本书,在直接编译书本源程序时,出现头文件“apue.h”(UNIX环境高级编程)及“unp.h”(UNIX网络编程)错误,在这里坐下配置的笔记。
首先需要安装Linux系统。(在VirtualBox虚拟机里安装Centos6.7的Linux系统)
一、APUE
1、使用浏览器从http://www.apuebook.com/code3e.html下载源码src.3e.tar.gz(第3版)
2、将下载的压缩包移动至自己的工作目录
[luokuanh@luokh Downloads]$ cp src.3e.tar.gz /home/luokuanh/MySelf/unix/apue/
3、使用cd 进入到工作目录下,并解压压缩文件
[luokuanh@luokh Downloads]$ cd /home/luokuanh/MySelf/unix/apue/
[luokuanh@luokh apue]$ tar -xzvf src.3e.tar.gz
4、解压后可以在当前工作目录下看到apue.3e目录,进入到该目录下的lib/目录
[luokuanh@luokh apue]$ cd apue.3e/lib/
5、在lib目录下直接执行make命令(lib里已自带Makefile文件)编译动态链接库
[luokuanh@luokh lib]$ make
出现如下代码:
[luokuanh@luokh lib]$ make ar rv libapue.a bufargs.o cliconn.o clrfl.o daemonize.o error.o errorlog.o lockreg.o locktest.o openmax.o pathalloc.o popen.o prexit.o prmask.o ptyfork.o ptyopen.o readn.o recvfd.o senderr.o sendfd.o servaccept.o servlisten.o setfd.o setfl.o signal.o signalintr.o sleepus.o spipe.o tellwait.o ttymodes.o writen.o ar: creating libapue.a a - bufargs.o a - cliconn.o a - clrfl.o a - daemonize.o a - error.o a - errorlog.o a - lockreg.o a - locktest.o a - openmax.o a - pathalloc.o a - popen.o a - prexit.o a - prmask.o a - ptyfork.o a - ptyopen.o a - readn.o a - recvfd.o a - senderr.o a - sendfd.o a - servaccept.o a - servlisten.o a - setfd.o a - setfl.o a - signal.o a - signalintr.o a - sleepus.o a - spipe.o a - tellwait.o a - ttymodes.o a - writen.o echo libapue.a libapue.a此时在lib文件夹里可以看到libapue.a文件,这就是使用make编译出的动态链接库。
6、将lib目录下的libapue.a文件移至/usr/lib/目录中(需在root用户里)
[luokuanh@luokh lib]$ su - Password: [root@luokh ~]#
[root@luokh ~]# cp /home/luokuanh/MySelf/unix/apue/apue.3e/lib/libapue.a /usr/lib/
7、将apue.3e/includ/目录下的apue.h移至/usr/include/目录下
[root@luokh ~]# cp /home/luokuanh/MySelf/unix/apue/apue.3e/include/apue.h /usr/include/
8、此时就可以编译书本的源代码了
[luokuanh@luokh unit10]$ gcc ls1.c -o ls1 -lapue
注意编译条件结尾必须加上-lapue动态链接库,不然编程出错。
二、UNP
1、使用浏览器从http://www.unpbook.com/src.html下载源码unpv13e.tar.gz(第3版)
2、将下载的压缩包移动至自己的工作目录
[luokuanh@luokh Downloads]$ cp unpv13e.tar.gz /home/luokuanh/MySelf/unix/unp/
3、使用cd 进入到工作目录下,并解压压缩文件
[luokuanh@luokh Downloads]$ cd /home/luokuanh/MySelf/unix/unp/
[luokuanh@luokh apue]$ tar -xzvf unpv13e.tar.gz
4、解压后可以在当前工作目录下看到unpv13e 目录,进入到该目录下的lib/、libfree/、libgau/目录下执行make
[luokuanh@luokh unpv13e]$ cd lib
[luokuanh@luokh lib]$ make
[luokuanh@luokh lib]$ make ar rv ../libunp.a connect_nonb.o connect_timeo.o daemon_inetd.o daemon_init.o dg_cli.o dg_echo.o error.o get_ifi_info.o gf_time.o host_serv.o family_to_level.o mcast_leave.o mcast_join.o mcast_get_if.o mcast_get_loop.o mcast_get_ttl.o mcast_set_if.o mcast_set_loop.o mcast_set_ttl.o my_addrs.o read_fd.o readline.o readn.o readable_timeo.o rtt.o signal.o signal_intr.o sock_bind_wild.o sock_cmp_addr.o sock_cmp_port.o sock_ntop.o sock_ntop_host.o sock_get_port.o sock_set_addr.o sock_set_port.o sock_set_wild.o sockfd_to_family.o str_cli.o str_echo.o tcp_connect.o tcp_listen.o tv_sub.o udp_client.o udp_connect.o udp_server.o wraplib.o wrapsock.o wrapstdio.o wrappthread.o wrapunix.o write_fd.o writen.o writable_timeo.o ar: creating ../libunp.a a - connect_nonb.o a - connect_timeo.o a - daemon_inetd.o a - daemon_init.o a - dg_cli.o a - dg_echo.o a - error.o a - get_ifi_info.o a - gf_time.o a - host_serv.o a - family_to_level.o a - mcast_leave.o a - mcast_join.o a - mcast_get_if.o a - mcast_get_loop.o a - mcast_get_ttl.o a - mcast_set_if.o a - mcast_set_loop.o a - mcast_set_ttl.o a - my_addrs.o a - read_fd.o a - readline.o a - readn.o a - readable_timeo.o a - rtt.o a - signal.o a - signal_intr.o a - sock_bind_wild.o a - sock_cmp_addr.o a - sock_cmp_port.o a - sock_ntop.o a - sock_ntop_host.o a - sock_get_port.o a - sock_set_addr.o a - sock_set_port.o a - sock_set_wild.o a - sockfd_to_family.o a - str_cli.o a - str_echo.o a - tcp_connect.o a - tcp_listen.o a - tv_sub.o a - udp_client.o a - udp_connect.o a - udp_server.o a - wraplib.o a - wrapsock.o a - wrapstdio.o a - wrappthread.o a - wrapunix.o a - write_fd.o a - writen.o a - writable_timeo.o ranlib ../libunp.a [luokuanh@luokh lib]$
[luokuanh@luokh unpv13e]$ cd libfree/[luokuanh@luokh libfree]$ make
[luokuanh@luokh libfree]$ make ar rv ../libunp.a in_cksum.o inet_ntop.o inet_pton.o a - in_cksum.o a - inet_ntop.o a - inet_pton.o ranlib ../libunp.a [luokuanh@luokh libfree]$
[luokuanh@luokh unpv13e]$ cd libgai/[luokuanh@luokh libgai]$ make
[luokuanh@luokh libgai]$ make ar rv ../libunp.a ranlib ../libunp.a [luokuanh@luokh libgai]$
5、在unp13e目录下执行./configure,同时可以在unp13e目录下看到生成的动态链接文件libunp.a
[luokuanh@luokh unpv13e]$ ./configure
生成config.h文件
6、将libunp.a移至/usr/lib/,config.h、lib/unp.h及lib/addrinfo.h移至/usr/include/目录
移动前将unp.h中的
第7行: 7 #include "../config.h"改为 #include "config.h"
第249行:249 # include "../lib/addrinfo.h"改为# include "addrinfo.h"
[luokuanh@luokh unpv13e]$ su -[root@luokh ~]# cp /home/luokuanh/MySelf/unix/unp/unpv13e/libunp.a /usr/lib/[root@luokh ~]# cp /home/luokuanh/MySelf/unix/unp/unpv13e/config.h /usr/include/
[root@luokh ~]# cp /home/luokuanh/MySelf/unix/unp/unpv13e/lib/unp.h /usr/include/
7、编译源码
[luokuanh@luokh intro]$ gcc daytimetcpcli.c -o daytimetcpcli -lunp
完成。