linux環(huán)境下的c++編程_第1頁
linux環(huán)境下的c++編程_第2頁
linux環(huán)境下的c++編程_第3頁
linux環(huán)境下的c++編程_第4頁
linux環(huán)境下的c++編程_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、linux環(huán)境下的C+編程就C+開發(fā)工具而言,與Windows下微軟(VC,VS2005等)一統(tǒng)天下相比,Linux/Unix下C+開發(fā),可謂五花八門,各式各樣。Emacs,vi,eclipse,anjuta,kdevelop等層出不窮。Windows下,開發(fā)工具多以集成開發(fā)環(huán)境IDE的形式展現(xiàn)給最終用戶。例如,VS2005集成了編輯器,宏匯編ml,C/C+編譯器cl,資源編譯器rc,調(diào)試器,文檔生成工具,nmake。它們以集成方式提供給最終用戶,對于初學(xué)者而言十分方便。但是,這種商業(yè)模式,直接導(dǎo)致用戶可定制性差,不利于自動化,集成第三方工具的能力弱。例如,無法定制一些宏來處理一些重復(fù)操作;體

2、會不到自動化makefile一步到位快感;無法遠程登錄到服務(wù)器上進行開發(fā);無法使用某種粘合劑來把第三方工具(例如,文本工具,字符串工具)有效地調(diào)用起來??梢哉f,良好的商業(yè)支持和傻瓜式開發(fā),是它們主要的優(yōu)點。在linux下,開發(fā)工具被切割成一個個獨立的小工具。各自處理不同的問題。例如:編輯器(emacs,vim)調(diào)試器(gdb)編譯器(GCC)性能分析工具(gcov,gprof)文檔生成器(doxygen)用來進行編輯程序的用來調(diào)試程序用來編譯和鏈接程序的用來優(yōu)化程序的用來生成文檔的同時,還有一些系統(tǒng)工具和系統(tǒng)知識,我們是很有必要了解的:程序自動化機制makefile,系統(tǒng)粘合劑shell,系統(tǒng)

3、查找工具grep,locate,find。其它的工具(例如ctags,OCI公司的MPC等等),一旦熟練掌握,它們將成為你手中的利器。本文主要是一些針對LINUX下開發(fā)工具使用的經(jīng)驗之談。由于,工具品種繁多,我們沒有能力也沒有必要介紹。對于LINUX下IDE工具,例如eclipse,anjuta等,它們雖然也很實用,但是使用起來比較簡單,而且目前還算不上主流。所以,它們將不被著重介紹。同時,本文也不打算寫成各個工具的操作手冊,只著眼于介紹各個工具的想要解決的問題、運行機理和主要特性。編輯器要進行開發(fā),第一件事情就是選擇一個合適的編輯器。編輯器選擇有幾個要素1)減少不必要的編輯動作,減少編輯的時

4、間。一切能夠無二義性描述出來的編輯任務(wù),都可以而且應(yīng)該能被自動化。例如,每一個C+程序都會有一個main函數(shù);我們在定義.h文件時,都希望加入一些預(yù)處理指令#define來幫我們解決重復(fù)引用同一個頭文件而帶來的麻煩。鼠標(biāo)操作總是比鍵盤操作要慢的。這方面EMACS做得可算是到了極致。所以,EMACS用戶經(jīng)常會吹噓:他們編輯的速度等同于他們思考的速度。鏈表處理語言(有專貼)LISP(全名LIStProcessor,即鏈表處理語言),由約翰麥卡錫在I960年左右創(chuàng)造的一種基于入演算的函數(shù)式編程語言。LISP有很多種方言,各個實現(xiàn)中的語言不完全一樣。各種LISP方言的長處在于操作符號性的數(shù)據(jù)和復(fù)雜的數(shù)

5、據(jù)結(jié)構(gòu)。1980年代GuyL.Steele編寫了CommonLisp試圖進行標(biāo)準(zhǔn)化,這個標(biāo)準(zhǔn)被大多數(shù)解釋器和編譯器所接受。在Unix/Linux系統(tǒng)中,還有一種和Emacs一起的EmacsLisp(而Emacs正是用Lisp編寫的)非常流行,并建立了自己的標(biāo)準(zhǔn)。LISP的祖先是1950年代Carnegie-Mellon大學(xué)的Newell、Shaw、Simon開發(fā)的IPL語言。LISP語言的主要現(xiàn)代版本包括CommonLisp和Scheme0lisp擁有理論上最高的運算能力lisp在cad繪圖軟件上的應(yīng)用非常廣泛,普通用戶均可以用lisp編寫出各種定制的繪圖命令。2)可擴展性高。程序員預(yù)期的編輯

6、器應(yīng)該能提供一些編程的幫助,例如,語法高亮,自動補齊,自動排版,語法檢查等等。留心觀察一下gedit,vim,emacs,ultraEdit,就會發(fā)現(xiàn)它們提供的遠不是windows記事本,寫字板提供的那么簡陋的功能。對于一種新的語言,新的語法,它們應(yīng)該能很方便地提供支持,而不停留在一種或幾種固定的語言上。3)用戶可定制性高。如果想長期從事研發(fā),特別是linux/unix下研發(fā)的話,那么你很有必要學(xué)好一個功能足夠的編輯器。有這么一句話:Linux下程序員分為三種,使用emacs的,使用vi的,還有其它。EMACS是Stallman用lisp語言寫的一個GPL的編輯器。我們這里所說的emacs指的

7、是GNUemacs,而非Xemacs。由于它的開放性,我們可以把它打造成一個功能強大的IDE。我們在安裝好CGYwin之后,也可以在Windows系統(tǒng)下使用EMACS。CGYwin和MINGW是第三方寫的一個在Windows系統(tǒng)上模擬POSIX系統(tǒng)的工具。EMACS與其說的是一個編輯器,倒不如說它是一個操作系統(tǒng)。我們可以用它來寫編程,寫wiki,收發(fā)郵件等等。EMACS主要是通過兩種方式來進行擴展:el腳本(elisp是lisp的一種方言)和第三方擴展包。EMACS的入門成本很高。由于是純鍵盤操作,所以需要記憶大量的快捷鍵;功能強大是通過用戶添加一些擴展包,lisp腳本來實現(xiàn)的。如何正確配置和

8、修改是很需要耐心和技巧的。編譯器編譯器首選GCC(GNUCOMPILERCOLLECTION)0原因有兩個,它是GNU開源的,同時它對標(biāo)準(zhǔn)C+的支持度高達96.15%。而VC+6.0的支持度只有83.43%。GCC不僅是通常意義上的C或C+的編譯器,它還可以編譯java等其它語言。gcc是GUNc的編譯器,g+是GUNc+的編譯器,而EGCS(EnhancedGNUCompilerSuite)可以認(rèn)為是gcc的改進版。編譯語言從源程序到目標(biāo)代碼會經(jīng)過如下幾個階段:源程序一匯編程序一編譯成obj程序一鏈接成最終可執(zhí)行程序。我們可以通過一條編譯指令來完成所有步驟。也可以分步執(zhí)行。gcc有三個重要選

9、項-E(只進行預(yù)處理),-S(生成匯編代碼),-g(生成帶原代碼調(diào)試符號的可執(zhí)行文件,如果想用gdb調(diào)試的話,就應(yīng)該在編譯時打開這個選項)。GCC可以看作一個軟件包,除了編譯工具,它還集成了調(diào)試器gdb,性能分析工具gcov,gprof。只要我們裝好了GCC,這些強大工具就可以直接使用了。通過gcov,我們可以查看一個程序,源代碼中每行代碼的運行次數(shù)。我們優(yōu)化運行次數(shù)最多的代碼,那么就可以大大優(yōu)化程序。使用gcov時,需要打開GCC的fprofile-arcs和ftest-coverage兩個選項。gcov中常用的選項有-b分支統(tǒng)計信息。通過gprof工具,我們可以查看函數(shù)之間的調(diào)用順序,及各

10、個函數(shù)運行的時間。我們可以將gprof理解為linux/unix自帶工具time的加強版。使用gprof時,需要打開GCC的pg選項。gcov和gprof的共同點是在編譯程序時,加入自己的一些輔助信息,由此來進行程序診斷。除了,這些優(yōu)化手段,我們還可以使用一些內(nèi)存泄漏工具,來減少野指針,未釋放的內(nèi)存空間。調(diào)試器GDB即GNU的調(diào)試器,它是GCC附帶的一個性能優(yōu)質(zhì)的調(diào)試器。通過GDB和腳本結(jié)合,我們可以很好的實現(xiàn)回歸測試。GDB可以運行于CLI和GUI兩種模式(命令行和圖形模式)。默認(rèn)GDB是CLI模式的,我們可以去下載和安裝GUI模式的GDB,例如xxgdb,ddd等。一個更好的方式是在EMA

11、CS中使用GDB。GDB包括visualstudio工具的所有調(diào)試功能,還包括它沒有的功能。它除了支持,我們一般的設(shè)置斷點,單步跟蹤,stepin,stepout,stepover等,還有一些強大的功能。在gdb中,我們可以有以下幾種暫停方式:斷點(Breakpoint)、觀察點(WatchPoint)、捕捉點(CatchPoint)、信號(Signals)、線程停止(ThreadStops)0下面列舉幾個讓我印象深刻的功能。1)通過watch指令,可以讓程序在某個變量的值發(fā)生變化時,暫停下來。2)通過print指令,在程序運行時,設(shè)置變量的值,運行一個程序自身支持的一個方法。3)通過unti

12、l指令,我們可以讓程序在運行到某個程序時暫停下來。4)通過break.if指令,使得程序在滿足某個bool表達式時,暫停下來。粘合劑我想通過粘合劑這個詞來表達將多個工具粘合起來的膠水。例如,通過shell腳本,我們可以把OS命令,sed指令,awk指令,其它腳本文件等串聯(lián)起來,發(fā)揮它們的合力。在linuxC+編程中,我們不可避免地會使用makefile文件。通過它我們可以把編譯指令,生成文檔操作,清除操作等等串聯(lián)起來。從某種意義上來看,它也相當(dāng)于一個粘合劑。makefile的出發(fā)點是,維護好一個項目中眾多文件的依賴關(guān)系,由此得到一個源程序的拓?fù)鋱D。當(dāng)我們只修改圖中某個結(jié)點時,重新編譯時就只需要

13、將拓?fù)鋱D中關(guān)聯(lián)的鏈路進行編譯就好了。由此,大大縮短了編譯的時間。make有兩大概念:dependencies和rules。規(guī)則rule即針對每一個依賴關(guān)系dependency定義一個操作規(guī)則。這個細(xì)粒度的分離,就可以使我們可以定制軟件構(gòu)建的行為。例如,修改使用的編譯器,修改includepath,修改libpath,修改編譯選項等等。我們常見的VC中的nmake,功能和make是類似的。make使用的重點和難點是編寫Makefile文件。Makefile的語法相對其它語言來說是很不一樣的,我們要特別注意TAB鍵和空格鍵的區(qū)別。有很多工具可以用來幫助我們生成Makefile。最出名的就是GNU的

14、autoconf了。一個GNU程序的編寫,需要autoscan,aclocal,autoconf,automake這四個工具。我們知道GNU軟件安裝的三步曲是:./configure,make,makeinstall0其中./configure就是根據(jù)autoconf,alocal等工具生成一個makefile文件。make指令就是調(diào)用make指令來根據(jù)makefile文件的規(guī)則來編譯源程序。而makeinstall就是執(zhí)行makefile中的install規(guī)則指出的操作(一般是copy操作)。而makeclean就是執(zhí)行makefile中的clean規(guī)則指出的操作(一般是rm操作)。我們用E

15、clispe+CDT開發(fā)ManagedC+Project時,它就是通過objects.mk,subdir.mk,sources.mk三個文件來生成Makefile。我們注意觀察編譯時的輸出信息,就可以看到顯示的Makefile文件的內(nèi)容。可以說,如果想編譯出跨平臺的C+程序,那么makefile是一種最方便的機制。OCI公司為DouglasC.Schmidt的ACE,TAO開源社區(qū)編寫了一段偉大的perl腳本MPC。它由平臺信息,一個規(guī)則文件,源代碼,生成用戶想要的工程文件,例如Make,Nmake,VisualC+6,VisualC+7等等。GoogleWebTookit,Celtix做的事

16、情與之類似,不過它們是針對JAVA的,而MPC是針對C+的。結(jié)束語國內(nèi)資料太多的低層次的重復(fù),經(jīng)常是一個網(wǎng)頁被多次轉(zhuǎn)載,而且回答問題時深度不夠。個人找資料的順序是:查看quickstart或howto文檔一自帶的幫助(如果看起來不太吃力話)一百度查一下中文網(wǎng)頁,來理清一下基本概念一google查一下一幾個大的,相關(guān)的網(wǎng)站查下資料一看自帶幫助。再者,面對面的交流是十分重要的,大家可以相互理一下概念,交流一下心得??上В疑磉呥@種氛圍還是不夠。/這種氣氛現(xiàn)在想來是無比的難得Linux下開發(fā)還可以更友好一些。個人感覺,linux開發(fā)要在國內(nèi)普通程序員中大規(guī)模普及,還有一段很長的路要走。ubuntu火爆的主要原因,就是它幫用戶搭好一些默認(rèn)配置。用戶如果想新加一些服務(wù),它們提供了良好,有效地支持。所以,我想我們可以在IDE和現(xiàn)在linux這種一個個小部件的這兩種狀態(tài)之間,取一個折衷。也就是針對幾種主要需求的用戶,發(fā)布一些配置好的環(huán)境。尤其是emacs的各種el腳本(例如界面主題的color-theme,C/C+語言編輯策略,代碼樣式設(shè)置腳本,各種emacs系統(tǒng)設(shè)置),第三方擴展包(模板template,編程支持包cedet等)。每一個用戶浪費時間來進行這些配置是十分沒有意義的!工具始終只是工具,我們不能淪為工具的奴隸,不能

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論