發表文章

目前顯示的是 3月, 2013的文章

APUE在Mac OSX 10.7如何編譯

圖片
這篇是給自己看的筆記,算是完結以前未完成的功課。大學是唸管院的,研究所到交大,發現有很多課程的老師太有高度,自己有很多跟不上的,其中一個課程老師建議的補充教材就是這本APUE(W. Richard Stevens, Advanced Programming in the UNIX Environment, 1992)。在大學之前都是玩DOS,研一只有計算機中心給的一個帳號,可以連入工作站使用,但是什麼權限都沒有,玩沒多久很快就覺得沒意思。那個時代不像現在有Ubuntu, 有建立在BSD Darwin的Mac OSX, 有FreeBSD等可以上手玩,比較流行的是Sun Solaris。那個時候一台最最便宜的Sun工作站也要二十萬台幣,所上某些實驗室有,可惜不是我熟識的學長。總之,我有很多藉口,可以解釋當時為什麼那門課修得這麼差。 只是我還是想把這些缺口給修補起來。反而造成我日後走入這個行業,但是轉來轉去,最近才有機會又碰到UNIX-like的環境,又去把這本書拿出來看。 第一個重點,我知道這本書很老了,至少有出第二版。但因為我手上是1992年的初版(當時做學生時,花了一千多台幣買的)當然要善用現有資源。有意思的是,書上所提供source code的ftp site, 現在當然是不存在了。不過,現在我們有google可以用,只要輸入stevens.advprog.tar.z就可以找到很多mirror download site. 第二個重點,在網路上有看到第二版好像已經有針對Mac OSX有編譯設定,但是初版是沒有的。但我想Mac OSX的底層是一個BSD的版本,所以就用bsd的編譯方式來修改。 解開stevens.advprog.tar.z後,看到很多目錄和一些檔案,很好有一個README檔。 README說,第一件事就是要把Make.def.xxx的其中一個做成Make.defines,那就先試著用$ cp Make.def.44 Make.defines做完這件事。 接著我看到有三個目錄叫做lib.xxx,正好也對應到Make.def.xxx的三個UNIX版本,所以我就使用其中的lib.44來編譯程式庫。 $ cd lib.44 $more Makefile 發現Makefile使用systype.sh來找系統種類,但是手動跑systy