首先根據(jù)書上国夜,在書上對(duì)應(yīng)的網(wǎng)址下載到源碼包焚碌。
season@season-PC:/storage/unix$ ./configure
根據(jù)readme的指示佛吓,編譯庫文件
season@season-PC:/storage/unix$ cd lib
season@season-PC:/storage/unix$ make
巴拉巴拉一大堆蛇更,最后一行為:ranlib ../libunp.a 說明成功了之后繼續(xù)編譯:
season@season-PC:/storage/unix: cd ../libfree
season@season-PC:/storage/unix/libfree : make
如果爆出下面錯(cuò)誤:
gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o in_cksum.o in_cksum.c
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:60:9: error: argument ‘size’ doesn’t match prototype
size_t size;
^In file included from inet_ntop.c:27:0:/usr/include/arpa/inet.h:64:20: error: prototype declaration
extern const char *inet_ntop (int __af, const void *__restrict __cp,
^
<builtin>: recipe for target 'inet_ntop.o' failed
make: *** [inet_ntop.o] Error 1
錯(cuò)誤原因可以看出是,類型不對(duì)筋讨。解決辦法 :找到inet_ntop.c第61行 size_t size ->改成 socklen_t size) 也有可能是60行埃叭,之后繼續(xù)make一下。打開lib目錄
修改unp.h
#include"../config.h"
改成
#include"config.h"
返回unix文件夾
season@season-PC:sudo cp config.h /usr/local/include
season@season-PC:sudo cp lib/unp.h /usr/local/include
season@season-PC:sudo cp libunp.a /usr/local/lib
season@season-PC:cd intro
到此搭建完畢悉罕,測(cè)試一下 進(jìn)入intro文件內(nèi)
gcc daytimetcpcli.c -o 獲取時(shí)間
又報(bào)以下錯(cuò)誤:
/tmp/cciq4Jvt.o:在函數(shù)‘main’中:
daytimetcpcli.c:(.text+0x3b):對(duì)‘err_quit’未定義的引用
daytimetcpcli.c:(.text+0x6d):對(duì)‘err_sys’未定義的引用
daytimetcpcli.c:(.text+0xe5):對(duì)‘err_quit’未定義的引用
daytimetcpcli.c:(.text+0x114):對(duì)‘err_sys’未定義的引用
daytimetcpcli.c:(.text+0x153):對(duì)‘err_sys’未定義的引用
daytimetcpcli.c:(.text+0x196):對(duì)‘err_sys’未定義的引用
collect2: error: ld returned 1 exit status
在本目錄下make下 成功
season@season-PC:./daytimetcpcli 127.0.0.1
season@season-PC:connect error: Connection refused
又錯(cuò)咯!!繼續(xù)上搜索引擎,原來是由于某些原因daytime服務(wù)并沒有啟動(dòng)赤屋,可能系統(tǒng)還沒有安裝這個(gè)服務(wù)。
season@season-PC:apt-get install xinetd
啟用daytime服務(wù),打開 /etc/xinetd.d/daytime 有2個(gè)文件修改disable yes 改為 disable no重啟服務(wù)
season@season-PC:service xinetd restart
season@season-PC:./daytimetcpcli 127.0.0.1
11 SEP 2017 23:02:35 CST
關(guān)于單獨(dú)編譯daytimetcpcli.c出錯(cuò)的原因,沒有指定需要鏈接的庫壁袄。gcc -l參數(shù)是用來指定程序要鏈接的庫类早,-l緊接著就是庫名,那么庫名跟真正的庫文件名有什么關(guān)系呢嗜逻?就拿數(shù)學(xué)庫來說涩僻,他的庫名是m,他的庫文件名是libm.so,容易看出逆日,把庫文件名的頭lib和尾.so去掉就是庫名.解決加入libunp.a庫
season@season-PC:gcc daytimetcpcli.c -o 獲取時(shí)間 -lunp
season@season-PC:./獲取時(shí)間 127.0.0.1
11 SEP 2017 23:02:35 CST