linux安裝UNIX網路編程原始碼

來源:互聯網
上載者:User

unix系統我沒安裝,系統不易獲得而且也沒必要安裝unix。用linux是最佳選擇。再者我本來就是ubuntu系統,所以就在ubuntu下搭建環境了。

1,安裝編譯器,為了齊全還是安裝一下build-essential

  1. sudo apt-get install build-essential  

2,下載本書的標頭檔及樣本源碼

點此下載unpv12e.tar.gz(這個編譯有問題)點此下載unpv13e.tar.gz(這個經itnovice回複中告訴我已經解決了錯誤,所以最好用這個,能節省很多時間)


(下載unpv13e的話,3中解決問題的地方就可以略過了)

3,解壓unpv12e.tar.gz後進入目錄查看README,然後可以按照裡面提示操作,不過會遇到問題

第一步:在終端中進入upnv12e目錄,然後執行代碼:

  1. ./configure  


第二步:這裡有問題及解決方案

  1. cd lib  
  1. make  //這一步我出錯了  


錯誤碼為:

  1. gcc -g -O2 -D_REENTRANT -Wall   -c -o connect_nonb.o connect_nonb.c  
  2. In file included from connect_nonb.c:1:  
  3. unp.h:114: error: redefinition of ‘struct in_pktinfo’  
  4. make: *** [connect_nonb.o] 錯誤 1  

redefinition of ‘structin_pktinfo’的解決方案如下: 

結構in_pktinfo已經包含在標準標頭檔bits/in.h中了, 它又通過netinet/in.h 在unp.h中被包括進來. 只要將 unp.h 中的結構定義commentout注釋掉就行了. 

注釋掉之後重新

  1. make //build the basic library that all programs need  


這次就成功了!產生了../libunp.a檔案。


第三步:這一步沒有問題

  1. cd ../libfree  # continue building the basic library  
  2. make  


第四步:這步解決方案麻煩一點

  1. cd ../libgai   # the getaddrinfo() and getnameinfo() functions  
  2. make  

錯誤提示如下:

  1. gcc -g -O2 -D_REENTRANT -Wall   -c -o getaddrinfo.o getaddrinfo.c  
  2. getaddrinfo.c: In function ‘getaddrinfo’:  
  3. getaddrinfo.c:58: error: ‘EAI_ADDRFAMILY’ undeclared (first use in this function)  
  4. getaddrinfo.c:58: error: (Each undeclared identifier is reported only once  
  5. getaddrinfo.c:58: error: for each function it appears in.)  
  6. getaddrinfo.c:116: error: ‘EAI_NODATA’ undeclared (first use in this function)  
  7. make: *** [getaddrinfo.o] 錯誤 1  

解決方案如下:

回到unpv12e目錄: 

 

  1. cd ..  
  2. gedit configure.in   

找到下面一行注釋掉
LIBGAI_OBJS="getaddrinfo.ogetnameinfo.o freeaddrinfo.ogai_strerror.o"
然後用下面的代碼代替注釋掉的那行

  1. LIBGAI_OBJS=
  2. if test "$ac_cv_func_getaddrinfo" = no ; then
  3. LIBGAI_OBJS="$LIBGAI_OBJS getaddrinfo.o"
  4. fi
  5. if test "$ac_cv_func_getnameinfo" = no ; then
  6. LIBGAI_OBJS="$LIBGAI_OBJS getnameinfo.o"
  7. fi
  8. if test "$ac_cv_func_freeaddrinfo" = no ; then
  9. LIBGAI_OBJS="$LIBGAI_OBJS freeaddrinfo.o"
  10. fi
  11. if test "$ac_cv_func_gai_strerror" = no ; then
  12. LIBGAI_OBJS="$LIBGAI_OBJS gai_strerror.o"
  13. fi
  1. autoconf  
  2. ./configure  
  1. gedit Make.defines   

在檔案末尾加上下面這句:
CFLAGS = -g -O2 -D_REENTRANT-Wall -D_GNU_SOURCE

然後重新執行代碼:

[python]
view plaincopy
  1. cd libgai  # continue building the basic library  
  2. make  

ok,問題解決了!

4,將產生的libunp.a靜態庫複製到/usr/lib/和/usr/lib64/中。

  1. cd ..   //回到unpv12e目錄  
  1. sudo cp libunp.a /usr/lib  
  2. sudo cp libunp.a /usr/lib64  


5,修改unp.h並將其和config.h拷貝到/usr/include中,為了以後include方便

  1. gedit lib/unp.h   //將unp.h中#include "../config.h"修改為#include "config.h"  
  1. sudo cp lib/unp.h /usr/include  
  2. sudo cp config.h /usr/include  

6,編譯原始碼

  1. cd ./intro  
  2. gcc daytimetcpcli.c -o daytimetcpcli -lunp  

跟普通的編譯不一樣的是要在最後加上剛才那個連結庫,-l參數加上剛才那個libunp.a去掉lib和後面的.a。最後得到參數-lunp。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.