AIX開發環境介紹
2006-03-05 12:14:04 作者:秦寶軍 來自:http://www-900.ibm.com
隨著IBM pSeries服務器市場占有率的不斷增加,AIX操作系統也為越來越多的IT業者所喜愛。AIX作為UNIX家族中出色的一員,有著豐富的開發環境,AIX******的版本為AIX 5L版本2,***常見的版本為4.3.3,以5L版本為例,缺省安裝直接支持J2EE,這里主要介紹AIX系統的C/C++開發部分。
首先應當清楚,AIX并不集成C/C++,要使用這部分功能,必須安裝IBM C或者Visual Age C++(包含C編譯器),這篇文章只介紹Visual Age C++,將按照Visual Age C++的安裝、配置、編譯器的使用、程序調試的順序介紹,使用的平臺為AIX 5L。
安裝Visual Age C++
Visual Age C++要在AIX 5L上使用,******的版本為5.0.2,******的版本為6.0。Visual Age C++是一個功能強大的集成開發環境,和Windows平臺的Visual C++一樣,從項目的管理、編輯、編譯、調試等各方面,提供一系列完善的圖形化的操作界面。要完全安裝(包含IDE圖形界面)Visual Age C++,可遵循以下步驟:
1) 確定IDE圖形界面需要的Motif文件集已經安裝,命令如下:
lslpp -l X11.compat.adt.Motif12
如沒有安裝,應先從AIX操作系統安裝介質安裝這一文件集。
2) 將Visual Age C++的安裝介質放入機器的光驅中
注意,如果是Visual Age C++的產品盤,并不需要mount CD盤
3) 開始安裝Visual Age C++文件集,命令如下:smitty install_latest
安裝目錄選擇光區,使用F4鍵選擇,如下,
回車后將顯示如下界面:
如需要選擇安裝部分文件集,可在_all_latest菜單項下按F4鍵,使用F7鍵選擇要安裝的文件集,按回車鍵即可。
上面介紹的是是一種完整的安裝方式,如果只是使用C/C++的編譯器,不許要安裝Visual Age C++的圖形界面,可借助于下面的命令:
installp -aXgd /dev/cd0 vacpp.cmp
這條命令的運行結果是安裝我們需要的所有文件集。
配置Visual Age C++
正確安裝完Visual Age C++以后,還不能立刻使用,需要配置使用許可才可以正確使用。Visual Age C++的使用許可通過LUM(License Use Management)系統管理,所以正確的配置方法是先配置LUM服務器,再配置Visual Age C++的使用許可。
******步:配置LUM
LUM在AIX 4.3.3及5L版本中是一個必須的部件,系統的初始安裝過程中已經安裝,但是并沒有配置,使用i4cfg命令配置,如下:
# cd /usr/opt/ifor/bin
# ./i4cfg -a n -S a
這條命令將配置LUM成為并發的節點鎖定服務器工作方式(Concurrent Nodelock Server),如果沒有錯誤輸出,下一步是啟動LUM服務器:
# ./i4cfg -start
之后,可以用以下命令檢測LUM服務器的工作狀態:
# ./i4cfg -list
將顯示為:
第二步:配置Visual Age C++的使用許可
正確安裝Visual Age C++產品以后,可以在/usr/vac和/usr/vacpp兩個目錄下看到后綴為lic的文件,這些文件記載了Visual Age C++的使用許可協議,需要做的就是將需要的許可協議添加到LUM的管理中。使用的命令為i4blt,使用方法為:
i4blt -a -f license_file_name -R u -T license_num
具體過程如下:
首先添加C的使用許可,
#cd /usr/opt/ifor/bin
#./i4blt -a -f /usr/vac/cforaix_cn.lic -R u -T 10
然后再配置C++的使用許可,
#./i4blt -a -f /usr/vacpp/vacpp_cn.lic -R u -T 10
在上面的例子中配置的許可數為10,正確的配置完后可通過如下命令驗證許可數是否正確或許可協議有沒有正確的被添加,
i4blt -sl cn
注意以上的配置是在AIX 5L版本上進行的,如在AIX 4.3.3版本上,則i4cfg、i4blt命令存在/var/ifor/bin目錄下。
Visual Age C++的使用
安裝、配置以后,可以使用C/C++編譯器了,但當你運行cc時卻發現,cc沒有找到,不必懷疑安裝的正確性,這是沒有設置環境變量的緣故,在/usr/vac/bin目錄下有一個腳本文件replaceCSET,它會完成這一切。
可以用一個經典的小程序hello.c來測試一下編譯器的正確性,程序內容如下:
#include
main() {
printf("Hello!\n");
}
編譯、連接:
cc -o hello hello.c
將生成hello可執行程序。
一般情況下,我們習慣直接使用cc編譯程序,實際上AIX的C/C++編譯器還提供了其他的使用方法,如后綴為_r就有xlc_r、xlC_r,這里我們做一個完整的介紹。
AIX平臺上缺省的C++編譯器為xlC,而C的編譯器有三個:
cc: 這是***習慣用的,擴展模式的C編譯器
xlc: ANSI C編譯器,使用UNIX的頭文件
c89: ANSI C編譯器,使用ANSI頭文件
具體選擇何種編譯器,需根據程序的情況來選擇,一般我們可以使用cc。另外,還有一些后綴供我們選擇,結合以上的基本編譯器,給我們提供了更大的選擇范圍,如下:
_r 連接UNIX98標準線程庫
_r4 連接POSIX Draft4(DCE)標準線程庫
_r7 連接POSIX Draft7標準線程庫
128 Double型類型為128位并使用連接相關的庫
128_r Double類型為128位并使用UNIX98線程庫
128_r4 Double類型為128為并使用連接POSIX Draft4線程庫
128_r7 Double類型為128位并使用連接POSIX Draft7線程庫
另外,UNIX98已經兼容涵蓋了UNIX95、POSIX標準的內容,所以,如果程序中使用到線程函數,只許增加后綴_r就可以了。舉例說,編譯連接ANSI C并使用POSIX線程庫,可以使用xlc_r編譯器,當然也可以使用xlc -lpthread的形式。
這里提到的只是***基本的東西,還有很多方面的內容并沒有介紹到,例如如何生成使用動態庫,這些更詳細的東西需要參考相關的手冊,或撥打IBM技術支持電話尋求技術支持。
程序調試
調試程序比較復雜,一方面需要我們借助一些調試工具,如dbx 、truss、tprof等,另一方面也需要我們具有一些調試經驗。
這里介紹一個用dbx調試運行中的程序的方法,重點在于調試步驟,而不在于dbx工具的使用,以一個簡單的程序為例,程序為:
#include
main() {
long count=0;
int loop_count;
while(1) {
count *= (count++);
printf(" Test debug, count : %ld\n", count);
for (loop_count = 0; loop_count < 10; loop_count++) {
sleep(1);
}
}
}
程序名為dbg.c
調試步驟如下:
1) 編譯dbg.c
xlc -g -o dbg dbg.c
2) 運行dgb程序
./dbg
3) 查看dbg程序的進程ID
ps -ef | grep dbg | grep -v grep
假設dbg的PID為12345
4) 調試dbg程序
dbx -a 12345
5) 這時我們運行dbx的命令調試dbg程序了,下面是幾個常用的命令:
step : 單步運行
stop at line_number : 在某一行設置斷點
stop in subroutine_name: 設置斷點到某一個函數
cont : 繼續運行
6) 退出調試
注意退出時應使用detach而不是exit,否則會影響程序的運行,導致程序退出。
這篇文章只是簡單介紹AIX的開發環境,實際工作中用到的內容將遠遠不止這些知識,需要開發者查閱大量的相關資料,或訪問以下網址:
http://www-900.ibm.com/developerWorks/cn/index.shtml