1. 程式人生 > >【unp】unix網絡編程卷1-->環境搭建(ubuntu14.04)

【unp】unix網絡編程卷1-->環境搭建(ubuntu14.04)

func class pos span net 下載 size_t tran make

學習unp網絡編程,樹上的例子均存在#include "unp.h",故需要對環境進行配置。

1. 到資源頁下載unpv13e

2. 解壓並將unpv13e 移動到相應的文件夾下

3. 編譯

1 >$ cd unpv13e   
2 >~unpv13e/$ ./configure  
3   
4 >~unpv13e/$ cd lib  
5 >~unpv13e/lib/$ make  
6   
7 >~unpv13e/lib/$ cd ../libfree  
8 >~unpv13e/libfree/$ make  

如若出現以下問題:

 1 gcc -I../lib -g -O2 -D_REENTRANT -Wall   -c -o inet_ntop.o inet_ntop.c  
2 inet_ntop.c: In function ‘inet_ntop’: 3 inet_ntop.c:60:9: error: argument ‘size’ doesn’t match prototype 4 size_t size; 5 ^ 6 In file included from inet_ntop.c:27:0: 7 /usr/include/arpa/inet.h:64:20: error: prototype declaration 8 extern const char *inet_ntop (int __af, const void *__restrict __cp,
9 ^ 10 make: *** [inet_ntop.o] Error 1

則需要:

 1 >~unpv13e/libfree/$ vim inet_ntop.c  //將第60行的 size_t size 改成 socklen_t size;  
 2 >~unpv13e/libfree/$ make // 改變完後重新make  
 3 >~unpv13e/libfree/$ cd ../libgai  
 4 >~unpv13e/libgai/$ make   //以下只是warning, 乎略之  
 5 /usr/include/arpa/inet.h: In function
‘inet_ntop’: 6 inet_ntop.c:152:23: warning: ‘best.len’ may be used uninitialized in this function [-Wmaybe-uninitialized] 7 if (best.base == -1 || cur.len > best.len) 8 ^ 9 inet_ntop.c:123:28: note: ‘best.len’ was declared here 10 struct { int base, len; } best, cur; 11 ^ 12 gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o inet_pton.o inet_pton.c 13 ar rv ../libunp.a in_cksum.o inet_ntop.o inet_pton.o 14 a - in_cksum.o 15 a - inet_ntop.o 16 a - inet_pton.o 17 ranlib ../libunp.a

至此,編譯成功生成靜態庫libunp.a

4. 將生成的libunp.a復制到/usr/lib下

1 >~unpv13e/libgai/$ cd ..  
2 >~unpv13e/$ sudo cp libunp.a /usr/lib  


5. 修改unpv13e/lib/unp.h並復制

1 >~unpv13e/$ vim lib/unp.h  // 將#include "../config.h" 改成 #include "config.h"  
2 >~unpv13e/$  sudo cp lib/unp.h /usr/include  
3 >~unpv13e/$ sudo cp config.h /usr/include  


6. 編譯例子

1 >~unpv13e/$  cd intro  
2 >~unpv13e/$  gcc daytimetcpcli.c -o cli -lunp  



編譯成功則大功告成。

【unp】unix網絡編程卷1-->環境搭建(ubuntu14.04)