- 論壇徽章:
- 0
|
哎呀,經(jīng)過一番努力,Advanced
Programming in the Unix Environment 1[color="#000000"]st
Edition的代碼我終于知道是怎么跑的了.
首先在作者的網(wǎng)站www.kohala.com/start上面下載apue.linux3.tar.Z源代碼包,之后再Linux中用命令[color="#000000"]"tar
xzvf apue.linux3.tar.Z[color="#000000"]"解壓縮成文件夾apue即可.
[color="#000000"]"cd[color="#000000"]"進入apue目錄,閱讀DISCLAIMER,Make.def.rhlin,Sourcefiles,README等幾個文件. 其中DISCLAIMER文件中的內(nèi)容可以不做閱讀,我也沒細(xì)看...
Sourcefiles文件中的內(nèi)容是源代碼的組織結(jié)構(gòu),和書中的代碼編號是一一對應(yīng)的.比如Sourcefiles文件中的"1.1
file/ls1.c"就對應(yīng)著書中正文第4頁的"Program
1.1 List all the files in a
directory."以后可以按照Sourcefiles文件中的順序來對應(yīng)書中的代碼.
之后修改Make.def.rhlin文件,將其中的"LDLIBS=/home/thanlon/apue/libmisc.a #th"和"LIB =
/home/thanlon/apue/libmisc.a #th"替換成自己放置apue文件夾的位置,這個[color="#000000"]"libmisc.a[color="#000000"]"文件就是我們編譯之后所生成的庫文件.
最后閱讀README文件.此文件中完整的描述了如何[color="#000000"]"make[color="#000000"]"出來[color="#000000"]"libmisc.a[color="#000000"]"文件.首先通過作者的介紹明白了用":set
tabstop=4"命令可以把vi中tab的距離設(shè)置成4個字符.先通讀一遍[color="#000000"]"PART
ONE by W. Richard
Stevens[color="#000000"]",大致了解一下這些文件在正常的Unix系統(tǒng)上應(yīng)該如何編譯.因為本書第一版的年代比較久遠了,所以這個第一部分了解一下即可,讓我們知道大致流程是什么,重點是看第二部分.
README文件的第二部分[color="#000000"]"PART
TWO - Linux Redhat 6.0 specific[color="#000000"]",這個經(jīng)過測試在RHEL
5.1下可以編譯通過.步驟如下:
Read
PART ONE.
Edit
/apue/Make.def.rhlin so it contains the proper directories to store
your library in after it is compiled.
[color="#800000"] [color="#800000"]也就是上面我說的把[color="#800000"]"LDLIBS=/home/thanlon/apue/libmisc.a #th"[color="#800000"]和"LIB =
/home/thanlon/apue/libmisc.a #th"[color="#800000"]替換成自己放置[color="#800000"]apue[color="#800000"]文件夾的位置[color="#800000"],[color="#800000"]這個[color="#000000"]"[color="#800000"]libmisc.a[color="#000000"]"[color="#800000"]文件就是我們編譯之后所生成的庫文件[color="#800000"].
Copy
Make.def.rhlin to the new file Make.defines (in the apue directory at
the shell do %cp Make.def.rhlin Make.defines).
[color="#800000"] 也就是把"Make.def.rhlin
[color="#000000"]"這個文件copy成一個叫做[color="#000000"]"Make.defines[color="#000000"]"的文件,直接敲作者給的命令就可以了.
Switch
to the apue/lib.rhlin directory.
[color="#800000"] 之后"cd[color="#000000"]"到[color="#000000"]"apue/lib.rhlin[color="#000000"]"這個文件夾.
At
the shell execute the command "make". I usually do a "make
> op 2> eop" so that standard output is stored in the new
file op and standard error is in new file eop. That way if you have
problems you have a file to print as documentation to show to your
expert.
[color="#800000"] 先看一眼"systype.sh[color="#000000"]"這個文件,一般不會有什么問題,之后直接在當(dāng)前目錄下面[color="#000000"]"make[color="#000000"]"命令即可,不過像作者介紹的[color="#000000"]"make
> op 2> eop[color="#000000"]"可也以.[color="#000000"]"make[color="#000000"]"之后不出意外便以正確的話,系統(tǒng)直接打印新的命令提示符了.
That
is it if you are using rh6.0 or on an intel machine.
[color="#800000"] 到了這一步[color="#000000"]"libmisc.a"[color="#000000"]這個文件就算編譯好了[color="#000000"].
[color="#800000"] [color="#000000"]下一步就是運行代碼了[color="#000000"].[color="#000000"]有些文件比如Program
1.4 [color="#000000"]的"Print
the process ID.",[color="#000000"]直接用命令"gcc
hello.c -o hello"[color="#000000"]即可編譯出[color="#000000"]hello[color="#000000"]文件[color="#000000"],[color="#000000"]并可直接用命令[color="#000000"]"./hello"[color="#000000"]來運行[color="#000000"].[color="#000000"]但有的文件比如Program
1.2 [color="#000000"]的"Copy
standard input to standard output."[color="#000000"]程序[color="#000000"].[color="#000000"]直接用"gcc
mycat.c -o mycat"[color="#000000"]命令來編譯就會出現(xiàn)[color="#000000"]" /tmp/cc27IEoZ.o:
In function `main':
mycat.c:(.text+0x40):
undefined reference to `err_sys'
mycat.c:(.text+0x79):
undefined reference to `err_sys'
collect2:
ld returned 1 exit status[color="#000000"]"[color="#000000"]的提示[color="#000000"].[color="#000000"]這個具體原因可能是因為作者另外自己編寫的"Standard
Error Routines"[color="#000000"]文件沒有包含進去[color="#000000"].
我們可以通過回到apue/lib.rhlin文件夾下面,拷貝出"error.o"文件至我們所需要編譯的文件的文件夾,比如"cp
error.o
../mycat/"下面即可.之后在編譯的時候我們可以編寫Makefile文件來直接用make命令編譯,也可以通過命令" $gcc
-c mycat.c
$gcc
mycat.o error.o -o mycat
$./mycat"
[color="#000000"]來運行[color="#000000"].[color="#000000"]這樣我們就可以很好的使用Advanced
Programming in the Unix Environment 1[color="#000000"]st
Edition[color="#000000"]的隨書源代碼了[color="#000000"].
[color="#000000"]
[color="#000000"] 經(jīng)測試,此源代碼可以通過putty.exe使用SSH協(xié)議登陸,在Windows
XP Professional Edition SP3下的VMware
Workstation 6.5.1 build-126130內(nèi)安裝的Redhat
Enterprise Linux 5.1和Ubuntu
9.10下通過測試.
最后想說的就是,任何東西,只要認(rèn)真看了,好像都能看懂...最少弄不懂原理但是能明白怎么弄...以后還是不要浮躁,沉下心來好好研究研究這些東西吧!
[color="#000000"]為考T努力!為熟悉的在Linux環(huán)境下用C編程努力!
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u3/104863/showart_2089107.html |
|