Linux 中配置能夠運行《unix環境高級編程》的環境

這兩天想着學習Unix高級編程,可是在Linux環境中的Ubuntu 12.04下不能運行,報各種錯誤,主要是找不到一些Unix中的頭文件。其中提示 “錯誤:apue.h:沒有那個文件或目錄”.apue.h是作者自定義的一個頭文件,包括程序所需的常用頭文件及出錯處理函數。所以因該將它放入系統頭文件中(Linux下是 /usr/include),這樣gcc編譯器就可以找到它了。所以教大家配置可在linux下運行《unix高級編程》的實例。

步驟一:下載APUE 源代碼。

        到http://www.apuebook.com/網站下載2005版的源程序。本實例就是在2005版環境下運行。

步驟二:解壓縮修改源文件

        解壓至電腦中的某個目錄,比如我的是在/home/acer下,然後進入解壓目錄 apue.2e,修改Make.defines.linux中的WKDIR=/home/acer/apue.2e,爲WKDIR=/home/acer/apue.2e,這就是我們將要make的工作目錄(存放apue.2e的目錄),然後再進入std目錄,用vi打開linux.mk,將裏面的nawk全部改爲awk。

步驟三:添加定義常量和添加apue.h

        在apue.2e/include/apue.h中添加一行:#define ARG_MAX 4096
打開apue.2e/threadctl/getenv3.c和getenv1.c,添加一行:#include "apue.h"

步驟四:make編譯

            進入到apue.2e目錄下,輸入make命令。可能會出現如下錯誤

 gcc 1.1.c 
/tmp/ccbnJqcB.o: In function `main':
1.1.c:(.text+0x17): undefined reference to `err_quit'
1.1.c:(.text+0x4a): undefined reference to `err_sys'
collect2: ld returned 1 exit status
       原因:在apue.2e/ipp.h中定義了一個宏定義status和/usr/include/i386-linux-gnu/bits/timex.h中的成員status衝突

       解決方法:修改這個apue.2e/ipp/ipp.h文件中的宏名稱,例如改爲Status
然後將apue.2e/ipp/printd.c中977行的 hp->status 改爲hp->Status

步驟五:複製文件
      把頭文件apue.h放到/usr/include/中,注意要以root用戶操作以下命令

cp ~/apue.2e/include/apue.h /usr/include
cp ~/apue.2e/lib/libapue.a /usr/lib/
這樣,所有的都完成了,可以跑實例代碼了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章