隨着IBM pSeries服務器市場佔有率的不斷增加,AIX操作系統也爲越來越多的IT業者所喜愛。AIX作爲UNIX家族中出色的一員,有着豐富的開發環境,AIX最新的版本爲AIX 5L版本2,最常見的版本爲4.3.3,以5L版本2爲例,缺省安裝直接支持J2EE,這裏主要介紹AIX系統的C/C++開發部分。
首先應當清楚,AIX並不集成C/C++,要使用這部分功能,必須安裝IBM C或者Visual Age C++(包含C編譯器),這篇文章只介紹Visual Age C++,將按照Visual Age C++的安裝、配置、編譯器的使用、程序調試的順序介紹,使用的平臺爲AIX 5L。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
安裝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鍵選擇,如下,
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
如需要選擇安裝部分文件集,可在_all_latest菜單項下按F4鍵,
使用F7鍵選擇要安裝的文件集,按回車鍵即可。
上面介紹的是是一種完整的安裝方式,如果只是使用C/C++的編譯器,不許要安裝Visual Age C++的圖形界面,可藉助於下面的命令:
installp –aXgd /dev/cd0 vacpp.cmp
這條命令的運行結果是安裝我們需要的所有文件集。
如果所使用的安裝介質並不是光盤,而是VACPP6.tar.Z這樣的安裝介質。可使用如下的方法進行安裝。
通過FTP的途徑將VACPP6.tar.Z上傳到目標SERVER.隨後可以選擇安裝目錄。
我們選擇將VACPP6.tar.Z上傳到目標SERVER的 /home目錄下,並用uncompress命令解壓縮。然後在/ home下建立一個臨時目錄。我們命名爲VAC,(mkdir VAC).
在/home/VAC下執行tar -xf ../VACPP6.tar命令。
最後,在/home/vac/usr/sys/inst.images/下執行smitty installp,進行安裝。
配置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 -script
這條命令將配置LUM成爲併發的節點鎖定服務器工作方式(Concurrent Nodelock Server),如果沒有錯誤輸出,下一步是啓動LUM服務器:
#./i4cfg –start
之後,可以用以下命令檢測LUM服務器的工作狀態:
#./i4cfg –list
第二步:配置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 <stdio.h>
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 <stdio.h>
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