日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Dev

 Rainboy913 2013-12-07

文章來源: 點(diǎn)擊查看原文:Dev-Cpp/Mingw32 環(huán)境介紹

Dev-Cpp/Mingw32 環(huán)境介紹(1)

 

前言


  對(duì)于現(xiàn)在越來越多得關(guān)于編程方面得問題和商業(yè)公司對(duì)版權(quán)問題的擔(dān)心。所以向各位推薦一款類似于VC的IDE。這款I(lǐng)DE所使用的編譯程序是 GCC的Win32版本 Mingw32。而IDE本身也是GPL協(xié)議的產(chǎn)物。所以,不論是商業(yè)用戶,還是個(gè)人用戶都能夠自由的使用她,而不必為使用盜版軟件而提心吊膽的。另外,由于Mingw32是GCC的Win32版本。所以,也為Win32的程序員可以了解一下Unix和類Unix下的編程感覺。而且,Mingw32對(duì)Win32函數(shù)的支持也是很不錯(cuò)的。希望,我們的Mingw32之旅可以帶給你快樂。

介紹


  有關(guān)Dev-Cpp的介紹,我在這里不想多做解釋。因?yàn)橄旅鏁?huì)具體的介紹和講解的。我在這里只是想要介紹一下有關(guān)GCC的內(nèi)容。因?yàn)?,Dev-Cpp所使用的Mingw32是一款GCC編譯器。所以,對(duì)GCC的了解有助于使用Dev-Cpp。

gcc.exe
  這是一個(gè)C語言的編譯器,負(fù)責(zé)編譯C語言。這個(gè)也許大家都知道。不過,在這里我要先向大家說明一下。gcc只是一個(gè)C語言的編譯器。不能識(shí)別C++代碼。所以,以前所說的gcc可以編寫C++是一個(gè)誤傳。因?yàn)?,我們通常所說的GCC不是gcc.exe而是GCC的一套程序。其中就包括可以編譯C++語言的g++.exe

如果,你不確定這個(gè)gcc的版本,可以用如下的命令查看。

gcc -v

關(guān)于編譯,gcc可以通過命令符編譯。

gcc source.c -o binary

以上的命令,是讓gcc直接由.c代碼編譯成可執(zhí)行代碼。
也可以這樣。

gcc -c source.c -o code.o
gcc code.o -o binary

這樣就生成了一組二進(jìn)制代碼,然后在通過二進(jìn)制代碼生成可執(zhí)行程序。

g++.exe
  剛才已經(jīng)說過了,這個(gè)是一個(gè)用于編譯C++代碼的程序?;居梅ê蚲cc一樣。所以這里不再介紹了。只是讓各位了解一下,這個(gè)程序是編譯C++代碼的。

gdb.exe
  用于調(diào)試程序的。功能非常強(qiáng)大。可以調(diào)試C,C++等語言。據(jù)說還可以調(diào)試Java程序。不過我沒有試過。對(duì)于gcc/g++編譯出來的程序。需要再編譯時(shí)加上 -g 參數(shù)。gdb才能進(jìn)行調(diào)試。有點(diǎn)像VC的debug。

make.exe
  這是一個(gè)非常有用的程序,可以用來發(fā)布程序和編譯復(fù)雜關(guān)系的代碼組。其實(shí)有點(diǎn)像提示符版的安裝程序。不同的是,安裝程序是一段二進(jìn)制執(zhí)行代碼,而它是一個(gè)文本文檔。
  make所執(zhí)行的是makefile文件。文件是一個(gè)文本文檔,里面包含了程序的編譯規(guī)則。如果要用提示符調(diào)用的話可以用如下方法。

make -f makefile

然后,make會(huì)根據(jù)makefile所提供的編譯關(guān)系進(jìn)行編譯和安裝。下面是一段makefile的內(nèi)容。請(qǐng)注意,其開頭的空白是 tab。

release : main.o
 gcc main.o -o main
main.o : main.c
 gcc -c main.c -o main.o

然后,通過命令 make -f makefile release 就可以執(zhí)行了。
make會(huì)根據(jù)文件的創(chuàng)造日期來判斷是否要對(duì)main.o進(jìn)行重新編譯。也就是說,make可以知道作者修改了哪些文件,并將修改過的文件重新編譯。再連接成程序。這樣有助于開發(fā)者節(jié)省開發(fā)周期上的時(shí)間和精力。

好了,希望上面的介紹能讓各位滿意。在此,我只介紹一些主要的程序,不一一介紹其他的了。接下來我們介紹一下gcc生成的文件。

*.o 其實(shí)就是VC生成的*.obj
lib*.a 就是VC中用的*.lib靜態(tài)鏈接庫。只是,每個(gè)庫必須用lib開頭。在調(diào)用的時(shí)候,只要提供*的內(nèi)容就可以了。
*.so 雖然在Win32中很少用,幾乎不用但,還是介紹一下。這個(gè)就是Win32中的*.dll動(dòng)態(tài)連接庫。但是,在Ming32中已經(jīng)支持dll了。

好了,關(guān)于gcc的介紹就到這里。下面我們開始進(jìn)入正題。

 

第一章 安裝Dev-Cpp


  在這里,我不介紹Mingw32如何安裝。因?yàn)镈ev-Cpp中已經(jīng)包含了Mingw32。如果您想了解Mingw32如何安裝,可以查看其他相關(guān)的資料。這里不作闡述。
  首先,我們必須下載一個(gè)Dev-CPP的安裝程序。Dev-Cpp的官方網(wǎng)站是
http://www.。Dev-Cpp的網(wǎng)頁是http://www./dev/devcpp.html最新版本應(yīng)該是Dev-Cpp 4.9.9.0它的下載地址是 http://umn.dl./sourceforge/dev-cpp/devcpp4990setup.exe 。這個(gè)下載的文件中包含了全部的內(nèi)容。在得到安裝程序以后,我們就來安裝了。
  不論如何,我想,安裝這種小問題,我想不用再一步步介紹了吧。畢竟我們都是程序員,如果,連安裝都不會(huì)那真是……。不過,如果在安裝中有什么問題,可以提出。我會(huì)盡力幫你解決的。
  雙擊安裝程序后,就按照平常安裝的方式安裝,建議按照默認(rèn)安裝。當(dāng)然安裝的路徑就算便你了。在第一次安裝以后,程序會(huì)提示你界面的設(shè)置。如果你喜歡英文就選擇English。如果喜歡中文的,就選擇Chinese。注意不要選擇Chinese(TW)除非你安裝了繁體中文。并喜歡繁體中文。然后是圖標(biāo)設(shè)置。推薦你使用New Look。如果你喜歡其他的也可以。還有就是是否使用XP風(fēng)格。這些都隨便你了。
  好了就介紹到這里,到此。我已經(jīng)介紹了Dev-Cpp的安裝,如果順利。你們運(yùn)行以后,就會(huì)看到如下的界面。

  接下來介紹一下,有關(guān)Dev-Cpp在windows中的設(shè)置。由于GCC有很多的東西是要在提示符下進(jìn)行操作的,特別是為Dev-Cpp安裝,編譯一些工具包。所以,我們就Mingw32添加到系統(tǒng)命令中,有助于以后方便調(diào)用。
  方法很簡單,右鍵單擊 我的電腦。然后選色屬性。使用 高級(jí) 選項(xiàng)卡。點(diǎn)擊環(huán)境變量按鈕。點(diǎn)擊 Path 項(xiàng),點(diǎn)擊編輯按鈕。然后將DevCpp安裝目錄中的bin目錄的路徑添加到這個(gè)選項(xiàng)值的后面。注意,使用 ; 分隔。確定后啟動(dòng)命令提示符。輸入 gcc -v 看。一切都好了?,F(xiàn)在你就可以像在Linux環(huán)境下一樣在Win32環(huán)境下編譯程序了。

至此,您的Dev-Cpp環(huán)境就算弄好了。下面我們將介紹如何制作程序。

 

第二章 新建項(xiàng)目與編譯


  本章我們要進(jìn)行實(shí)戰(zhàn)訓(xùn)練了。介紹一下如何在Dev-Cpp下進(jìn)行項(xiàng)目新建和編譯。我相信你一定會(huì)慢慢喜歡上這個(gè)編譯環(huán)境的。
  點(diǎn)擊文件菜單,選擇新建,點(diǎn)擊工程。在出現(xiàn)的對(duì)話框中選擇你所需要的程序種類。如下圖所示。

 

 

  其中,Windows application是Win32圖形界面。Console Application是Win32控制臺(tái)程序。Static Library是Win32的靜態(tài)連接庫。DLL是Win32的動(dòng)態(tài)連庫。Empty Project是更具已有的項(xiàng)目類型創(chuàng)造一個(gè)新的項(xiàng)目類型。下面的內(nèi)容是選擇使用的語言,如是C語言還是C++語言。還有就是項(xiàng)目名稱。這個(gè)名稱將作為程序編譯后的可執(zhí)行程序的名稱。
  在這里為了方便敘述,我們就新建一個(gè)Console Application項(xiàng)目好了。至于使用的語言,就隨便你了。我這里就用C語言為例了。點(diǎn)擊確定后,提示項(xiàng)目保存的路徑,建議您選擇其他路徑不要使用默認(rèn)的路徑,因?yàn)槟J(rèn)的路徑是安裝目錄。如果放在那里的話,會(huì)很混亂的。在其他目錄中,新建一個(gè)文件夾(當(dāng)然不新建也可以,只是這樣便于管理)將項(xiàng)目保存在那里。然后,在點(diǎn)擊保存按鈕(這個(gè)按鈕就是一張磁盤,和Windows里的一樣)或者從文件菜單中選擇保存或者Ctrl + S。這些都可以。這樣,Dev就會(huì)提示你項(xiàng)目中默認(rèn)文件的保存目錄。通常名為main.*。選擇一個(gè)路徑,保存就好了。(建議和項(xiàng)目文件保存在一起)

  下面我們就來編譯程序了。點(diǎn)擊工具欄,第二行,第一個(gè)彩色的按鈕。就進(jìn)行編譯了。這時(shí)會(huì)出現(xiàn)一個(gè)編譯窗口,顯示編譯的進(jìn)度。你可以通過環(huán)境選項(xiàng)來設(shè)置它。在編譯完成后,點(diǎn)擊第二個(gè)白色的按鈕,就可以運(yùn)行程序了。是不是很方便?我也是那么覺得。

  接下來,我就來介紹一下,有關(guān)項(xiàng)目目錄內(nèi)的文件的作用。

main.c 程序的C語言源代碼。
main.o main.c的二進(jìn)制代碼。
Makefile.win 就像我上面所說的,這個(gè)是項(xiàng)目的Makefile文件。用make命令可以編譯程序的。
*.dev *的內(nèi)容視你項(xiàng)目的名稱所定。這個(gè)是項(xiàng)目文件,用于記錄你對(duì)項(xiàng)目的設(shè)置。有關(guān)文件內(nèi)個(gè)字段的作用就不做介紹了。
*.exe 你所生成的可執(zhí)行程序。

最后,我介紹一下如何不用IDE來編譯生成程序。
首先進(jìn)入您項(xiàng)目所在的目錄。然后用如下命令。

make -f makefile.win all

就可以編譯了。當(dāng)然,也可以直接通過編譯源代碼來實(shí)現(xiàn)。具體的方法,我已經(jīng)在開頭介紹過了。這里就不再重復(fù)介紹了。

 

 

文外音:
 
文章就暫時(shí)介紹到這里,以后還會(huì)繼續(xù)介紹。有關(guān)Dev-Cpp/Mingw32更多的內(nèi)容以后會(huì)一一為各位展示。敬請(qǐng)期待。
另外,還希望各位多多指教。我的格言:不論是程序還是思想,唯有通過不斷的交流才能愈加完善。

 

STUDIO 軟件開發(fā)組

北斗星君(黃庠魁)

Dev-Cpp/Mingw32 環(huán)境介紹(2)

上文回顧


  上文(《Dev-Cpp/Mingw32 環(huán)境介紹(1)》)我們知道了該如何安裝和使用Dev-Cpp。并且,知道了一些有關(guān)Mingw32的一些用法和一些有關(guān)程序的介紹和使用方法。學(xué)會(huì)了一些基本操作的方法。如新建項(xiàng)目,編譯項(xiàng)目等。這一次,我們將繼續(xù)上一次的內(nèi)容。

第三章 為你的Dev-Cpp安裝開發(fā)包


  對(duì)于許多程序員來說,讓一套喜歡的開發(fā)包和一個(gè)自己喜歡的IDE結(jié)合在一起是最高興不過的了。自然我也是。上一次我們了解了在Dev-Cpp中如何新建項(xiàng)目。但是,美中不足的是,她似乎只能新建一些簡單的程序。比如 控制臺(tái)程序,動(dòng)態(tài)連接庫,靜態(tài)連接庫等。似乎要完成一項(xiàng)復(fù)雜的工作有些困難。當(dāng)然,C/C++語言是一門鼓勵(lì)代碼重用的開發(fā)語言,我們可以對(duì)每個(gè)新建的項(xiàng)目進(jìn)行設(shè)置,從而使用自己喜歡并習(xí)慣的開發(fā)包。但是,這或許太過于繁瑣了。而且,安裝,編譯這些開發(fā)包的文件也太過于麻煩了。所以,Dev-Cpp也就為各位開發(fā)者提供了 包 的概念。
  在Dev-Cpp中有一個(gè)包管理系統(tǒng)。使用這個(gè)系統(tǒng),你可以方便的安裝各種開發(fā)包。有了這個(gè),你的Dev就會(huì)越來越順手。那就像《人月》中的一篇文章的標(biāo)題《Sharp Tool》(銳利的工具)那樣了。下面我們就來一步步學(xué)習(xí)如何安裝開發(fā)包。
  首先,我們必須有一個(gè)已經(jīng)做好了的開發(fā)包。我們可以從Dev-Cpp的官方網(wǎng)站獲得。這里是開發(fā)包的下載頁面的地址
www./dev/packages/index.html 在上面你可以找到很多你熟悉的工具。當(dāng)然,如果沒有也有和你喜歡的工具類似的工具。如果,你覺得這些工具太古來了,或者還不夠。在頁面的下方就有一些鏡像站點(diǎn)的地址。通常,這些鏡像的內(nèi)容要比主站豐富許多。所以,你可以從很多途徑得到這些包?,F(xiàn)在我們就隨便下載一個(gè)作為演練。如果你不建議,我們就下載一個(gè)Fast Light Toolkit。當(dāng)然,你也可以下載其他包。我這里只是作為講解。
  在下載完成以后,我們將會(huì)得到一個(gè)后綴名為 *.DevPak 的文件。這個(gè)就是開發(fā)包文件。這個(gè)文件的使用和我們平時(shí)使用的安裝文件一樣。不同的是,安裝文件會(huì)修改注冊(cè)表,將安裝信息些進(jìn)去。如果系統(tǒng)重新安裝,就需要重新安裝程序。而這個(gè)安裝文件不會(huì)將安裝信息寫入注冊(cè)表。并且,只要安裝程序的目錄沒有刪除。下次安裝的時(shí)候,就不許要再安裝了。除非使用的Mingw32過新或者過舊無法支持?,F(xiàn)在,我們好好的保存這個(gè)文件。
  接下來話分兩頭,我們來介紹一下 Package Manager 這個(gè)程序你可以用兩種方法啟動(dòng)。一種是點(diǎn)擊Dev中的工具菜單,選中最后一項(xiàng)的Package Manager。另一種方法是到安裝目錄中,直接運(yùn)行 Packman.exe 。運(yùn)行以后你就會(huì)看到如下的一個(gè)界面。

如果,你運(yùn)行以后沒有看到左側(cè)的工具欄或者上面的工具欄。你可以在View菜單中將其中的選項(xiàng)全部選上就可以了。下面介紹有關(guān)操作的一些方法。其中,Install按鈕是用來安裝開發(fā)包了。而Verify按鈕是用來檢查開發(fā)包的完整性的。而Remove按鈕是用來刪除開發(fā)包的。這個(gè)界面中間空白的部分是顯示開發(fā)包圖標(biāo)的,左側(cè)的工具欄是用來顯示開發(fā)包信息的。其中包括開發(fā)包的名稱、版本號(hào)、介紹和提供的站點(diǎn)等信息。上方的工具欄是用方便用戶操作的?;旧喜藛沃杏械?。工具欄上都有了。所以,普通的工作工具條就可以完成了。

  好了,到這里。我們的話再說回來。所謂言規(guī)正傳,大概就是派這個(gè)用場(chǎng)的吧。(怎么突然想到魯迅先生的《阿Q正傳》呢?真奇怪。)我們介紹一下安裝包的方法。
  安裝工具包的方法有兩種,當(dāng)然是我常用的兩種。至于有沒有其他方法。自然也有。只是我個(gè)人還是比較喜歡這兩種。如果哪位有什么比較怪誕的方法自然也可以用。只要能夠順利使用,用什么方法都是可以理解的嘛。所謂條條道路通羅馬嘛。有些時(shí)候,我們不必過于計(jì)較方法,我們要的是結(jié)果。
  第一種方法,就是像我們平時(shí)使用安裝程序一樣。直接雙擊那個(gè)工具包。Package Manager 會(huì)很熱情的跳出來幫你完成任務(wù)的。然后,你就更具提示一步步的走就可以了。這種方法的確很不錯(cuò)。只是覺得用起來不夠?qū)I(yè)。如果被人看到,會(huì)被別人認(rèn)為是菜鳥的。所以,我這里為大家隆重介紹第二種安裝方法。首先你先運(yùn)行Package Manager 然后點(diǎn)擊Install按鈕。她會(huì)提示你告訴她工具包的位置。只要選擇好工具包,點(diǎn)擊確定。剩下的就和第一種方法一樣了。這種方法看起來會(huì)比較老鳥一點(diǎn)。不過太麻煩了。不是么?那么是不是我們要在菜鳥和老鳥種做選擇呢?當(dāng)然不用。我個(gè)人意見是,平時(shí)就用第一種方法。有人請(qǐng)教什么的,就用第二種方法。
  好了,安裝好以后。我們會(huì)看到Package Manager中會(huì)多一個(gè)圖標(biāo)。這個(gè)就是你剛才安裝的工具包。如果覺得用起來不爽就選中她然后按Remove就可以了。
  下面你可能會(huì)問我,我安裝完了。改如何用呢?問的好,值得表揚(yáng)。這個(gè)問題嘛……當(dāng)然是很簡單的啦。要是連這個(gè)也不能回答我怎么能在這里說,你在那里聽呢?(誒,原本想早點(diǎn)說完回家睡覺的……)對(duì)于不同的開發(fā)包,使用的方法會(huì)有所不同。如果是IDE自身的開發(fā)包。那么,你在使用IDE的時(shí)候IDE會(huì)在運(yùn)行時(shí)調(diào)用的。就不用你操心了。要知道,一個(gè)人操心太多會(huì)多很多皺紋和死很多腦細(xì)胞的。而一些開發(fā)工具就可以在新建工程中看到,至于具體在哪里要看具體的包而定。
  接下來我還是以Fast Light Toolkit為例。來說明包的使用方法。Fast Light Toolkit是一個(gè)GUI開發(fā)包。(我想你該知道什么是GUI吧,說的簡單一點(diǎn)就是Graphical User Interface。說得復(fù)雜一點(diǎn),就是用戶界面)好了。我們現(xiàn)在開始新建一個(gè)工程,這個(gè)在上文中已經(jīng)介紹過了。不過這次在確定項(xiàng)目的時(shí)候有些改變。這次,我們?cè)邳c(diǎn)擊新建工程后出現(xiàn)的對(duì)話框中,選擇GUI選項(xiàng)卡。然后選擇FLTK。因?yàn)镕LTK是用于C++的。所以,我們這里只能用C++而C是不可選狀態(tài)的(怎么有硬來的感覺)。接下來的一切和上次我們說好的一樣了。Dev會(huì)自動(dòng)生成一個(gè)main.cpp的文件。里面有一些基本的代碼。保存后編譯,運(yùn)行??梢钥吹揭粋€(gè)你仰慕以舊的Windows界面。(啊,終于看到你了,窗口)我想,那么聰明的你應(yīng)該會(huì)舉一反三,知道其他的工具包如何使用吧。所謂,師父領(lǐng)進(jìn)門,修行靠自身。我也不可能一步到位啊。
  最后,我想請(qǐng)你們注意一下。在安裝包之前,先要看清楚有關(guān)包的說明。因?yàn)橛行┌怯幸蕾囮P(guān)系的,必須在安裝某個(gè)包之后再安裝她。這就像,要知道有些時(shí)候同樣的結(jié)果是不能將操作的順序顛倒一樣。比如,你必須先有個(gè)妻子,然后才有個(gè)兒子。(除非特殊情況)

第四章 工程的導(dǎo)入與導(dǎo)出


  四這個(gè)數(shù)字總是不太吉利。在中國是這樣,在國外好像也這樣吧。既然我們不能跳過四,直接到五(因?yàn)槟菢?,別人會(huì)認(rèn)為是不是自己漏看一章而覺得遺憾終生的)所以,我就在這章介紹一些無關(guān)痛癢的東西。就算不吉利也不會(huì)影響到我們開發(fā)的。
  對(duì)于用慣VC開發(fā)的人。有許多項(xiàng)目在Dev下開發(fā)還要重新在設(shè)置和編寫,會(huì)覺得很頭痛。所以,Dev就在她的里面加了一項(xiàng)將VC6.0的工程文件轉(zhuǎn)換成Dev的工程文件的功能。(這句話好繞口啊,下次把它改成繞口令算了)是個(gè)好消息吧。
  首先,我們必須有一個(gè)VC6.0的工程做測(cè)試。沒有也沒有關(guān)系,看看長長見識(shí)也不錯(cuò)。反正這章講的是不關(guān)痛癢的內(nèi)容。接著,我們開始導(dǎo)入了。選擇文件,導(dǎo)入,導(dǎo)入Visual C++ Project。點(diǎn)擊后,會(huì)出現(xiàn)一個(gè)對(duì)話框。在第一個(gè)選項(xiàng)選擇*.dsp的路徑(填入也可以,只要你能把完整路徑寫出來)。選擇完畢后。對(duì)話框就會(huì)出現(xiàn)有關(guān)該項(xiàng)目的一些屬性。你只要選擇就可以了。比如,第二個(gè)框內(nèi)的內(nèi)容就是問你是導(dǎo)入那種生成配置。Debug或者Release還是其他什么的。第三個(gè)框內(nèi)問的是你要將Dev的項(xiàng)目文件放在哪里。(當(dāng)然是在你自己的計(jì)算機(jī)上,還有哪里?難道讓勇氣號(hào)帶到火星上不成?)全部選擇好以后就可以了按確定了。在等待一段時(shí)間后(具體長短,要看你的程序體積如何,如果像VC編寫的Linux Kernel。那么是要等一段比較長的時(shí)間。如果有的話)?,F(xiàn)在開啟Dev項(xiàng)目看看。怎么樣,一切正常吧。是不是很興奮?或許有人要問,這么重要的功能為什么說是無關(guān)痛癢的功能呢?其實(shí),更具我使用下來的情況。導(dǎo)入的代碼能夠成功編譯的,算是你幸運(yùn)的要準(zhǔn)備去買六合彩了。因?yàn)椋钡浆F(xiàn)在我還沒有導(dǎo)入過一個(gè)可以成功編譯的項(xiàng)目。(如果你可以,記得一定要告訴我,好讓我見識(shí)一下傳說中的可導(dǎo)入工程)。
  下一個(gè)功能是導(dǎo)出。這個(gè)功能當(dāng)然不像上一個(gè)功能那么那樣。不過,功能對(duì)于一般的開發(fā)者不會(huì)有太大的用處。你可別以為這個(gè)導(dǎo)出和上面的導(dǎo)入是相對(duì)的。就是把Dev工程導(dǎo)出成VC6.0工程。這個(gè)導(dǎo)出,是講C/C++的文件工程導(dǎo)出成網(wǎng)頁形式。或者寫字板形式的。如果你是像用這個(gè)工程做教程的確實(shí)是一個(gè)很不錯(cuò)的功能。不過,開發(fā)者還是編寫代碼大于寫教程吧(好像我是個(gè)不務(wù)正業(yè)的開發(fā)者)。所以,我認(rèn)為這個(gè)功能是有些無關(guān)痛癢。下面介紹一下使用方法。
  選擇文件,導(dǎo)出后,會(huì)有三個(gè)選項(xiàng)。到HTML,到RTF和工程到HTML。第一個(gè)和第二個(gè)是對(duì)單個(gè)文件進(jìn)行導(dǎo)出。而第三個(gè)是對(duì)整個(gè)工程進(jìn)行導(dǎo)出。(就是所有的代碼)第一,第二個(gè)的導(dǎo)出文件我也不用介紹了。反正也就那么一個(gè)文件。我具體的介紹一下第三個(gè)所生成的文件。第三個(gè)生成了一個(gè)*.html,*的內(nèi)容是由你決定的。和一個(gè)名位code的文件夾。里面包含了轉(zhuǎn)成html文件的程序代碼。當(dāng)然,這些代碼都是有色彩提示的,很不錯(cuò)。這樣看來,所謂的導(dǎo)出工程,其實(shí)就是將整個(gè)工程文件轉(zhuǎn)換成一個(gè)類似于網(wǎng)站樹型結(jié)構(gòu)的功能。所以說,這個(gè)功能用于說明代碼是很不錯(cuò)的。
  好了介紹到這里,介紹了一些無關(guān)痛癢的功能。我想,你們也許也對(duì)Dev-Cpp有一個(gè)大概的了解了吧。如果,你想知道更多的關(guān)于導(dǎo)入和導(dǎo)出的功能的介紹??梢蕴岢鰜怼4蠹乙黄饋斫鉀Q嘛。

 

文外音


文章就暫時(shí)介紹到這里,以后還會(huì)繼續(xù)介紹。有關(guān)Dev-Cpp/Mingw32更多的內(nèi)容以后會(huì)一一為各位展示。敬請(qǐng)期待。
覺得這次的文章,好像沒有上次那么有含金量,而且寫作風(fēng)格也有所改變。如果你喜歡這種風(fēng)格我以后會(huì)多運(yùn)用,如果不喜歡請(qǐng)你說出喜歡那種風(fēng)格的。我會(huì)作為參考的。
另外,還希望各位多多指教。我的格言:不論是程序還是思想,唯有通過不斷的交流才能愈加完善。

 

STUDIO軟件開發(fā)組

北斗星君(黃庠魁)

Dev-Cpp/Mingw32 環(huán)境介紹(3)

上文回顧


  上文《Dev-Cpp/Mingw32 環(huán)境介紹(2)》向各位介紹了一些有關(guān)Dev-Cpp的功能,其中有包的安裝和一些小功能。希望能得到你的滿意。這次,我們就繼續(xù)介紹Dev-Cpp的其他功能。其實(shí),說句實(shí)話。對(duì)于GNU的東西,我個(gè)人覺得還是提示符下用的舒服。我也不知道為什么。有很多功能,在提示符下很簡單的打幾個(gè)字符,可以完成像Windows的IDE需要點(diǎn)很多鼠標(biāo)才能完成的功能。我說這個(gè)并不是沒有道理的空穴來風(fēng)。本次我將為你展現(xiàn)我這一觀點(diǎn)。

 

第五章 在Dev-Cpp下的程序調(diào)試

 

  對(duì)于任何程序員來說,程序的調(diào)試是再需要不過了。如果沒有程序調(diào)試,那么程序的穩(wěn)定又從何說起呢?現(xiàn)在我們就來看看如何使用Dev來調(diào)試我們親愛的程序吧。
  眾所周知,GNU有一個(gè)非常棒的調(diào)試程序GDB,可是由于常常使用VC。所以,對(duì)于這個(gè)許多人都有所而聞而未目睹這一程序的芳容?,F(xiàn)在我們就來掀開他的蓋頭來。首先,我們超常,啟動(dòng)Dev-Cpp這次我們要做的是在Dev-Cpp下調(diào)試程序。在Dev-Cpp下,調(diào)試程序并不像在VC下那樣有專門的程序界面來做。他的調(diào)試界面就在代碼框的下面。只要選擇下面的 調(diào)試 選項(xiàng)卡就可以看到調(diào)試界面了。
  在各位看到調(diào)試界面后,會(huì)不會(huì)有一種凄涼的感覺?其實(shí)我已經(jīng)凄涼了好幾年了。大家也就將就一下了。其中調(diào)試選項(xiàng)卡中還有三個(gè)選項(xiàng)。調(diào)試,回溯,輸出。其中,調(diào)試就是將一些調(diào)試的命令做成按鈕,方便各位操作。不過我個(gè)人覺得這個(gè)功能說方便也不方便。因?yàn)橛行r(shí)候就是很簡單的一個(gè)操作也會(huì)讓使用的人手忙腳亂的。回溯,是將GDB調(diào)會(huì)的有關(guān)函數(shù)的信息顯示出來,這個(gè)功能還不錯(cuò)。輸出,是將用戶的GDB命令直接輸出給GDB程序,沒有按鈕了,不過這個(gè)界面有個(gè)不太好的地方,就是顯示GDB返回信息的窗口太小了。有種管中窺豹的感覺,很不舒服。
  話說那么多,覺得有些羅嗦。各位是不是手癢癢了?(該不是小兒多動(dòng)癥吧?)現(xiàn)在隨便開啟一個(gè)程序,最好是代碼行數(shù)多點(diǎn)的,參數(shù)多點(diǎn)的,函數(shù)多點(diǎn)的,提示符界面的程序。因?yàn)?,這個(gè)可以幫助你們了解基本的運(yùn)行機(jī)制嘛。
  點(diǎn)擊調(diào)試窗口的調(diào)試按鈕,如果你的程序沒有調(diào)試信息,那么Dev會(huì)提示你是否重新編譯程序加入調(diào)試信息。選擇是。然后程序?qū)⑹褂肈ebug方式重新編譯連接程序。在完成之后。我們就開看看自己的程序吧。首先,我們先要運(yùn)行GDB。在次點(diǎn)擊調(diào)試,或者將編輯區(qū)的光標(biāo)移動(dòng)到你要運(yùn)行到的位置點(diǎn)擊運(yùn)行到光標(biāo)。然后,程序就開始運(yùn)行了。其中,你會(huì)看到在編輯區(qū)中有一個(gè)藍(lán)色的條子。這個(gè)就指示你該程序運(yùn)行到何處了。如果你愿意,可以繼續(xù)向下運(yùn)行一行。你只要點(diǎn)擊 下一步 就可以完成。對(duì)于其他有關(guān)GDB的操作,比如代碼的查看,變量的查看,函數(shù)的信息等等,只有通過輸出來完成了。選擇輸出,然后在輸出中的字符輸入框中輸入你的GDB命令。比如:list 這個(gè)命令將在下面的字符框中列出程序的代碼。當(dāng)然,你要上下找找,因?yàn)榭蛱。雌饋砗苈闊?br>   好了,有關(guān)IDE中的調(diào)試,本人就介紹到這里。在深入的東西,當(dāng)然也沒有深入的東西了。再深入的話,怕我沒有累死,大家可要看著煩死了。其實(shí)上面介紹的一些操作如果再提示符下很容易就Ok了。更本不需要那么復(fù)雜。我想,可能這也是Dev不能流行的一個(gè)主要原因吧。因?yàn)榻缑娴牟僮魈蝗诵曰恕?/span>

 

第六章 在提示符下的程序調(diào)試


  上一章中,我們領(lǐng)略了Dev-Cpp下的調(diào)試。真是讓人有些不感恭維。接下來我們來欣賞一下標(biāo)準(zhǔn),經(jīng)典的GDB調(diào)試。如果各位對(duì)Linux等系統(tǒng)有所了解的話,應(yīng)該知道提示符是許多經(jīng)典軟件的常用界面。所以,要使用一些經(jīng)典的東西,看來還是要在提示符下多熟悉熟悉了。當(dāng)然,這里的提示符并不像各位想的那么麻煩,要有上百條命令要記憶。其實(shí),像GDB這樣的程序,基本就是一個(gè)很簡單的命令就可以解決了。而且非常靈活。
  接下來我就來介紹一個(gè)GDB的調(diào)試。
  首先我們必須要一個(gè)可以調(diào)試的代碼?,F(xiàn)在我們用gcc main.c -o main -g來生成可調(diào)試的代碼。然后用gdb main 來啟動(dòng)gdb。是不是沒有想象的那么復(fù)雜???如果順利您會(huì)看到一段GDB的版權(quán)信息,接著是(GDB)這樣一個(gè)提示符?,F(xiàn)在您就可以對(duì)GDB下命令了。
  看看程序代碼。如果,我們想看看調(diào)試程序的源代碼而又不想開啟main.c這個(gè)文件(更多的原因是要為后面設(shè)置斷點(diǎn)等來做鋪墊)。那么我們可以輸入list或者,l就可以查看程序代碼了。是不是???看來提示符并沒有像我們想象的那么可怕。
  運(yùn)行程序代碼。雖然調(diào)試是可以那么我們?cè)撊绾卧谡{(diào)試的時(shí)候運(yùn)行代碼呢?很簡單。輸入run或者r就可以運(yùn)行了。如果前面設(shè)置過斷點(diǎn),那么使用這個(gè)命令可以讓程序運(yùn)行到斷點(diǎn)。
  為調(diào)試設(shè)置斷點(diǎn)。使用break可以設(shè)置斷點(diǎn),讓調(diào)試程序在斷點(diǎn)停止運(yùn)行的程序。break 后面必須有一個(gè)參數(shù)。參數(shù)可以是行號(hào)。如,break 10 就是在第10行設(shè)置斷點(diǎn)。也可以是函數(shù)名稱break main就是在main函數(shù)處設(shè)置斷點(diǎn)。
  查看程序變量。如果您像查看程序中的變量,可以用paint或者p命令來實(shí)現(xiàn)。這兩個(gè)命令后必須加上變量名稱。如 p argc就是顯示argc的值。而使用info命令可以查看相關(guān)的信息,如內(nèi)存位置什么的。
  一步步運(yùn)行程序。如果您像在斷點(diǎn)后一步步的執(zhí)行程序,可以用n或者next命令來執(zhí)行下一行代碼。
  退出調(diào)試。輸入q退出程序。

  是不是覺得提示符下的調(diào)試要比IDE中的簡單?你不要以為這就是GDB的全部功能。我在這里只是為各位展示一下GDB。如果各位要了解更多的關(guān)于GDB的使用方法。可以查看技術(shù)手冊(cè)或者到網(wǎng)上尋找相關(guān)的文章,可以找到很多。
  最后,如果對(duì)于GDB和調(diào)試程序有什么疑問,我們可以一起探討。


文外音


這次的文章好像很短,我也覺得。但是,沒有辦法。所謂眾口難調(diào)。這一章總是要講的。干脆提早一些寫好。下一篇我們將進(jìn)入項(xiàng)目的建立和靜態(tài)庫的使用。我想一定會(huì)讓你感到興奮的。最后,希望你能夠多多指教。我的格言:不論是思想還是程序,唯有通過不斷的交流才能愈加完善。

 

STUDIO軟件開發(fā)組

北斗星君(黃庠魁)

Dev-Cpp/Mingw32 環(huán)境介紹(4)


上文回顧


上文《Dev-Cpp/Mingw32 環(huán)境介紹(3)》向各位介紹了有關(guān)使用GDB調(diào)試程序的簡單方法。本文我們將會(huì)看看Mingw32如何來使用靜態(tài)連接庫。雖然本文出爐的時(shí)間的確是有些慢了點(diǎn)。不過我想各位應(yīng)該能夠理解的。

第七章 在你的程序中使用靜態(tài)連接庫


  在Windows中也許各位都會(huì)熟悉以obj和lib結(jié)尾的文件。這些文件就是Win32下的二進(jìn)制文件和靜態(tài)連接庫。但是在Mingw32下有些特殊,我原來在第一章介紹過的。他們是o和a。很奇怪吧。不過我們這里只要知道如何使用就可以了。關(guān)于更多的不在本文的范圍內(nèi)。
  我們先以VC為例,各位知道在VC中使用靜態(tài)庫,要在連接程序的時(shí)候選擇導(dǎo)入的靜態(tài)庫。參數(shù)為靜態(tài)庫的全名。比如winmm.lib但是在Mingw32下有些不同。你所使用的參數(shù)為 -lwinmm這個(gè)就可以了。而-lwinmm的意思是導(dǎo)入靜態(tài)鏈接庫libwinmm.a。是不是有些想不通?下面我們來介紹一下在Dev中的使用和意義。
  首先我們啟動(dòng)Dev,新建一個(gè)工程。然后選擇工程->工程屬性。(如果你使用New Look圖標(biāo),那么工程屬性就是一個(gè)盾型圖標(biāo)。)然后,選擇參數(shù)選項(xiàng)卡。在連接器的文本框中輸入你要的參數(shù),如-lwinmm。至于分割符,可以使用空格,也可以使用回車。不過我個(gè)人推薦回車。如果順利,你的界面看起來會(huì)像下圖。


  當(dāng)然你如果要使用*.lib可以,只要將文件名直接填入就可以了。就像 winmm.lib。當(dāng)然如果用絕對(duì)路徑也可以。
  下面我們來看看靜態(tài)連接庫的格式。當(dāng)然,我們不是從文件格式去分析,而是從調(diào)用格式看。通常靜態(tài)庫的文件名為 lib*.a其中*表示的就是任何字符。而在我們調(diào)用的時(shí)候,不需要將所有的文件名都用上,只需要使用*的內(nèi)容就可以了。就像調(diào)用libwinmm.a的靜態(tài)庫我們只需要在連接的時(shí)候加參數(shù) -lwinmm就可以了。前面的lib和后面的.a都不需要了。如果,還不太明白??梢钥纯磀ev安裝目錄中的lib目錄。里面有很多win32下的靜態(tài)連接庫。自己分析一下文件名和調(diào)用方法就會(huì)很清楚了。
  最后我們實(shí)戰(zhàn)一下靜態(tài)連接庫的使用。
  寫什么好呢?寫一個(gè)控制臺(tái)上的音樂播放器吧。當(dāng)然只是簡單的播放音樂而已,而且路徑不支持中文。這里只是為了熟悉一下靜態(tài)庫的使用。
  新建一個(gè)控制臺(tái)工程,然后我們?cè)趍ain.c的代碼中寫如下代碼。

//main.c
#include <windows.h>
#define MAX 255

int main(int argc, char *argv[])
{
    if (argc == 2)
    {
        char filename[MAX];
       
        strcpy(filename, "open ");
       
        strcat(filename, argv[1]);
       
        strcat(filename, " alias media");
       
        mciSendString("close media",0,0,0);

        mciSendString(filename,0,0,0);

        mciSendString("play media",0,0,0);

        system("pause");
    }
    else
    {
        printf("play.exe musicfilename");
    }

    return 0;

}
//main.c end

然后我們?cè)诠こ虒傩缘倪B接器參數(shù)中輸入 -lwinmm 好了。開始編譯。如果順利,我們的程序就會(huì)編譯成功。并且可以播放一些常用的音樂文件。高興吧。

好了,這章我們就到這里用這個(gè)例子結(jié)束了。

問外音:
由于本人最近比較忙,所以原來的兩章一文改成了一章一文。請(qǐng)?jiān)?。下一章我們將介紹如何建立Mingw32的靜態(tài)連接庫。敬請(qǐng)期待。并且希望各位能夠多提意見。因?yàn)椴徽撌浅绦蜻€是細(xì)想唯有通過不斷的交流才能愈加完善。

 

STUDIO軟件開發(fā)組

北斗星君(黃庠魁)

 

Dev-Cpp/Mingw32 環(huán)境介紹(5)


上文回顧


上文《Dev-Cpp/Mingw32 環(huán)境介紹(4)》我們介紹了如何使用 靜態(tài)連接庫。今天我們介紹如何制作自己的Mingw32的靜態(tài)鏈接庫。至于Win32下的那種靜態(tài)連接庫我想熟悉Win32的人應(yīng)該很清楚如何制作。所以我們這里就不做介紹了。

 

第八章 制作自己的靜態(tài)鏈接庫


  這是第八章,八這個(gè)數(shù)字很多人都喜歡。我也一樣。(感覺好迷信啊。)這一章我們要來制作靜態(tài)鏈接庫,我相信各位一定會(huì)很高興的。
  首先我先簡單介紹一下靜態(tài)鏈接庫的作用。我們知道,C/C++程序生成目標(biāo)代碼的過程有,編寫代碼,編譯代碼,連接代碼,生成目標(biāo)代碼。在連接代碼的時(shí)候,會(huì)將編譯后的二進(jìn)制代碼連接成目標(biāo)代碼。但是,有些時(shí)候。我們想讓程序?qū)氡匾拇a,而不想導(dǎo)入無用的代碼到我們的程序中。我們?cè)撊绾文兀亢芎唵?,使用靜態(tài)連接庫。使用它我們就可以實(shí)現(xiàn)將在程序中使用的函數(shù)導(dǎo)入的目的。
  下面我們來一步步的學(xué)做靜態(tài)鏈接庫并且學(xué)會(huì)如何使用。
  我們現(xiàn)在先寫一段代碼,你可以用Dev也可以用記事本也可以用任何你喜歡的文本編輯器。像我就比較喜歡vi或者emacs作為平時(shí)的文本編輯器。話說遠(yuǎn)了,現(xiàn)在言規(guī)正傳。我們寫下下面的代碼。

//HelloWorld.c

#include <stdio.h>

void HelloWorld(void)
{
        printf("Hello World");
}

上面那段C代碼各位應(yīng)該很熟悉的吧,那么經(jīng)典的Hello World好讓我懷念啊。保存為HelloWorld.c以后我們就開始生成了。
首先,我們先編譯HelloWorld.c

gcc -c HelloWorld.c -o HelloWorld.o

這樣我們得到一個(gè)二進(jìn)制的文件HelloWorld.o

接著我們生成靜態(tài)庫。

ar cqs libHelloWorld.a HelloWorld.o

這樣我們黨額靜態(tài)鏈接庫就好了。如果有需要可以將其他的二進(jìn)制文件名加HelloWorld.o的后面將他們連接成一個(gè)靜態(tài)鏈接庫。另外,生成的靜態(tài)庫文件名必須為lib*.a

好了,現(xiàn)在我們來使用我們的庫吧。

接下來,我們?yōu)榱四軌蚴褂梅奖?,寫一個(gè)如下頭文件。

//HelloWorld.h
void HelloWorld(void);

接著我們開始使用我們剛才生成的靜態(tài)庫。寫一個(gè)main.c的文件。

//main.c

#include "HelloWorld.h"

int main(void)
{
        HelloWorld();
        return(0);
}

使用gcc編譯,假設(shè)我們這里所有的文件都保存在同一個(gè)目錄下。

gcc -c main.c -o main.o

然后我們連接程序。

gcc main.o -o main.exe -L"./" -lHelloWorld

如果順利我們會(huì)得到一個(gè)main.exe的文件。

在控制臺(tái)下輸入main.exe或者main就可以出現(xiàn) Hello World 這組單詞。

看了上面的文章是否很興奮想要生成自己的靜態(tài)鏈接庫?其實(shí),我個(gè)人覺得mingw32生成靜態(tài)鏈接庫要比VC生成的簡單。不知道你有沒有這樣的感覺。

當(dāng)然,如果你要在Dev下使用靜態(tài)連接庫,也是可以的。方法我在上一章已經(jīng)說過了。只是,如果你要使用自己的庫必須設(shè)置路徑。

只要在連接器參數(shù)中添加 -L"你的庫的所在的文件夾" 或者 將你的庫保存到Dev安裝目錄中的lib目錄中。

好了,本文就介紹到這里。如果有什么問題,可以在這里留言。

問外音


這篇文章其實(shí)我真的很喜歡,不是文章喜歡,而是內(nèi)容很喜歡。不知道各位如何想。這里介紹了一個(gè)生成靜態(tài)庫的方法,感覺比VC生成的要簡單。其實(shí)在gcc的Linux平臺(tái)下生成動(dòng)態(tài)連接庫還要比VC下生成不知道要簡單多少倍了。如果說Win32中用于開發(fā)最好的平臺(tái)是win2000那么,在那么x86系統(tǒng)中用于開發(fā)的平臺(tái)莫過于Linux了。這章的內(nèi)容也許對(duì)許多的程序員都有些陌生,我實(shí)在擔(dān)心各位會(huì)在實(shí)踐中會(huì)碰到問題,所以在這里還是希望各位在遇到困難時(shí)多到這里提問。最后還是我的一句名言:不論是程序還是思想唯有通過不斷的交流才能愈加完善。(看過《古畑任三郎》么?主角總喜歡在發(fā)表觀點(diǎn)后,說一句:我是古畑任三郎。感覺我也和他一樣了。不過,這的確是一部不錯(cuò)的影片。至少比國內(nèi)許多偵探片都好,沒有額外的劇情,沒有你你我我的愛情。純粹是從一個(gè)破案的角度來拍攝的。推薦各位看看。)

 

STUDIO軟件開發(fā)組

北斗星君(黃庠魁)

Dev-Cpp/Mingw32 環(huán)境介紹(6)


上文回顧:
上文《Dev-Cpp/Mingw32 環(huán)境介紹(5)》中,我們了解了如何來制作靜態(tài)連接庫。的確,上一片文章至今已經(jīng)很長時(shí)間了。所以,我這次會(huì)用更多的內(nèi)容來回報(bào)各位讀者的。下面我們就來說說如何制作動(dòng)態(tài)鏈接庫。

第九章 制作自己的動(dòng)態(tài)鏈接庫

  “我沒有做夢(mèng)吧,Mingw32也能做win32的動(dòng)態(tài)連接庫?”對(duì)你沒有做夢(mèng),我也沒有胡說。下面我簡單介紹一些動(dòng)態(tài)庫的生成和使用。
  還是老樣子,我們來開啟Dev-Cpp,然后我們新建工程。選擇DLL工程。這個(gè)就是我們的鏈接庫。在新建以后,我們會(huì)生成一個(gè)dll.h和一個(gè)工程名.c文件。其中,dll.h中保存的是你動(dòng)態(tài)庫的函數(shù)。下面我們看看我的文件內(nèi)容。

//dll.h
#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */


#endif /* _DLL_H_ */

#include <windows.h>

BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,
                       DWORD reason        /* Reason this function is being called. */ ,
                       LPVOID reserved     /* Not used. */ )
{
    switch (reason)
    {
      case DLL_PROCESS_ATTACH:
        break;

      case DLL_PROCESS_DETACH:
        break;

      case DLL_THREAD_ATTACH:
        break;

      case DLL_THREAD_DETACH:
        break;
    }

    /* Returns TRUE on success, FALSE on failure */
    return TRUE;
}

DLLIMPORT int HelloWorld(void);

//dll.h End

其中我在最后一行加入了自己的函數(shù),HelloWorld。

下面我們來看看我的HelloWorld.c

//HelloWorld.c
#include "dll.h"

DLLIMPORT int HelloWorld(void)
{
    printf("Hello,World!");
    return(0);
}

//HelloWorld.c End

好了,我們就來編譯吧。使用Dev的編譯命令或者用如下命令。

我們將會(huì)得到兩個(gè)文件。一個(gè)libHelloWorld.a,一個(gè)HelloWorld.dll。我們使用這兩個(gè)文件就可以編程了。

文外音:
說實(shí)話,這次這篇文章和前幾篇文章相比間隔確實(shí)有些長了。由于我前一階段有些忙了,所以,這次為各位讀者抱歉了。下面我們要學(xué)的是如何使用剛才我們編寫的動(dòng)態(tài)庫。

第十章 使用自己的動(dòng)態(tài)鏈接庫

上文回顧:
上文,我們介紹了如何生成動(dòng)態(tài)庫。下面我們就來使用它吧。

新建一個(gè)工程main.c的文件如下

//main.c

#include <stdio.h>
#include <stdlib.h>
#include "dll.h"

int main()
{
  HelloWorld();
  return(0);
}

//main.c End

現(xiàn)在將剛才那個(gè)工程中的 dll.h libHelloWorld.a HelloWorld.dll文件復(fù)制到你現(xiàn)在工程的目錄里。

然后,我們現(xiàn)在開啟工程屬性。在鏈接器一欄中加入

-l"HelloWorld"

保存工程后編譯。一切成功后,我們就獲得了使用動(dòng)態(tài)鏈接庫的方式了。以后我們只要修改鏈接庫的HelloWorld就可以修改程序中的顯示。希望這篇文章各位能滿意。

文外音:
的確,現(xiàn)在很忙,所以文章的質(zhì)量也下降了不少。不過還是希望給為能夠多多諒解。最近在搞NASM匯編。發(fā)現(xiàn)其實(shí)Emcas和Nasm確實(shí)很不錯(cuò)。非常喜歡。不過,C我還是會(huì)追求的。只是,可能以后和各位的交流會(huì)少些,但是我還是會(huì)用我的文章來使各位獲得有關(guān)Dev的內(nèi)容。本系列文章,未完,待續(xù)。






STUDIO軟件開發(fā)組(SDT)
STUDIO Development Team
北斗星君(黃庠魁)

上文回顧:
在上一篇中,我為各位介紹了如何制作包文件,和新建一個(gè)自定義的工程。下面我按照約定,要介紹wxWidget的安裝。本文適合Dev-Cpp和Mingw32編譯器的。

第十四章 wxWidget的下載與安裝

  這一章我將為各位介紹如何下載安裝wxWidget這個(gè)GUI開發(fā)庫。
  首先,我們先要知道,我們是在win32下使用wxWidget的。所以,我們現(xiàn)在要下載的是wxMSW這個(gè)開發(fā)庫。MSW我想你也知道是什么意思。直到這篇文章寫出來,wxMSW的最新版本是2.5.3。現(xiàn)在你可以從
www.上下載,也可以在如下地址下載。http://umn.dl./sourceforge/wxwindows/wxMSW-2.5.3.zip。都是一樣的。我通常喜歡用umn.dl.的下載。偏愛吧。還有,wsMSW-2.5.3.zip是一個(gè)免安裝的wx。而另一個(gè)wxMSW-2.5.3-setup.zip是需要安裝的。差別不是太打。如果問我,我比較喜歡wxMSW-2.5.3.zip。
  然后,我們就在你的驅(qū)動(dòng)器上建立一個(gè)目錄叫 wxWidget-2.5.3。并把壓縮包里的文件解壓到該目錄中。注意要全部解壓。當(dāng)然如果你想少解一點(diǎn)(至少我全部都要)你可以解如下的文件夾和文件。不過注意,路徑不能更改。否則的話麻煩就大了。(也就是說原來的路徑是 build/msw/makefile.vc 你不能用makfile.vc替代)

build/msw/config.gcc
build/msw/makfile.gcc

include/
lib/
src/

還有一個(gè)contrib這個(gè)目錄其實(shí)并不是很重要。至少你在平時(shí)使用中不會(huì)很多的用它。如果需要你可以解開,但是通常只有在需要的時(shí)候才會(huì)編譯。

這樣我們的庫就算安裝好了。當(dāng)然,如果你是Dev-Cpp的朋友。你可以按照我前面介紹的自定義工程,來設(shè)置工程的參數(shù)。這里,我們?cè)诰幾g器參數(shù)中加入

-I(安裝目錄)/include/

連接器參數(shù)加入

-L(安裝目錄)/lib/

好了,這章就到這里了。

第十五章 wxWidget的編譯與用wxWidget編譯程序

  現(xiàn)在我們用cmd.com進(jìn)入build/msw。如果你按照我在第一章介紹的方式設(shè)置了。那么輸入

make -f makefile.gcc

讓make來編譯程序。在一陣狂編之后。我們就算安裝好了wxWidget。這是我們就進(jìn)入demo/bombs/這個(gè)目錄,輸入

make -f makefile.gcc

就可以嘗試我們編譯的結(jié)果了。你可以將提示符出現(xiàn)的編譯參數(shù)作為鏈接參數(shù)和編譯參數(shù)給Mingw32使用編譯自己的工程。

編譯完成后,你會(huì)看到在bombs的gcc_debug目錄里有一個(gè)文件bombs。運(yùn)行一下,一個(gè)掃地雷出現(xiàn)了。(我一直不會(huì)玩掃地雷,也許我的智商不高)。也許你會(huì)下意識(shí)的看看文件的體積…… 哇!你會(huì)恐懼的發(fā)現(xiàn)這個(gè)程序要 12MB 那么大……。你不用害怕,因?yàn)檫@個(gè)是調(diào)試用的庫。所以加入了大量的調(diào)試內(nèi)容。12MB也是應(yīng)當(dāng)?shù)摹?/span>

  好了,現(xiàn)在我們來編譯一個(gè)小小的wxWidget庫。還是一樣,我們?cè)诰幾g的時(shí)候要使用一個(gè)參數(shù)。我們?cè)赽uild/msw/下輸入

make -f makefile.gcc BUILD=release

好現(xiàn)在,我們就可以得到release的庫了。同樣,編譯一下bombs來看看。進(jìn)入gcc_release目錄,程序一樣運(yùn)行,但是體積卻小了N多。如果壓縮一下,程序還會(huì)更小都不滿1MB。

  但是,我們還要更小更小的庫。通常,現(xiàn)在網(wǎng)上絕大部分都介紹到上面第二種編譯方式,這已經(jīng)相當(dāng)不錯(cuò)了。通常只有第一種。下面我就來介紹一下一個(gè)比較特別的編譯方式。

  如果各位用過MFC就會(huì)知道,其實(shí)MFC使用的是動(dòng)態(tài)鏈接庫,這樣可以加大重復(fù)代碼的利用率。如果更新主程序就不需要更新動(dòng)態(tài)庫的內(nèi)容了。所以,我下面介紹如何把wxWidget編譯進(jìn)動(dòng)態(tài)鏈接庫中。
  同樣我們要進(jìn)入build/msw/目錄。同樣用make。輸入

make -f makefile.gcc BUILD=release SHARED=1

首先注意大小寫,另外,release參數(shù)是必須的,否則就會(huì)生成那種可怕的恐龍文件。但是缺點(diǎn)是不能對(duì)wxWidget進(jìn)行調(diào)試。在一段時(shí)間的編譯后,我們就會(huì)在lib/gcc_dll中得到動(dòng)態(tài)鏈接庫和庫文件。如果你想長期使用,就把*.dll復(fù)制到 ~/system32/目錄中去好了?;蛘咴O(shè)置PATH值為該目錄。接下來我們就來編譯bombs測(cè)試。輸入

make -f makefile.gcc BUILD=release SHARED=1

這次我們會(huì)在gcc_dll目錄中找到bombs。如果直接運(yùn)行,你會(huì)看到錯(cuò)誤提示。當(dāng)然如果你把動(dòng)態(tài)鏈接庫復(fù)制到/system32/目錄中就不會(huì)看到了。我們把bombs.exe復(fù)制到lib/gcc_dll/目錄中,運(yùn)行后,就會(huì)看到程序界面。不過……看看體積……我的天,100多KB。夠小了吧。我們就用這個(gè)開發(fā)wxWidget吧 ^_^

下面列出編譯器的參數(shù)和連接器的參數(shù)好讓各位創(chuàng)建自定義工程。

編譯器參數(shù):
-O2  -DHAVE_W32API_H -D__WXMSW__    -I(wxWidgets)\include -I(wxWidgets)\lib\gcc_dll\msw -Wall -I. -DWXUSINGDLL -I(wxWidgets)\samples -DNOPCH

連接器參數(shù):
-mthreads -L(wxWidgets)\lib\gcc_dll -Wl,--subsystem,windows -mwindows  -lwxmsw25_core  -lwxbase25   -lwxtiff -lwxjpeg -lwxpng -lwxzlib  -lwxregex -lwxexpat   -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lodbc32

其中(wxWidgets)代表你安裝wxWidget的位置。

好了,這次的wxWidget之行就到這里了。希望你能成功的走過第三步。

文外音:
其實(shí),我早就喜歡用wxWidget了,只是生成的文件實(shí)在嚇人。所以遲遲不敢再用。后來轉(zhuǎn)用gtk。不過我也研究到底怎么樣把wxWidget體積縮小。所以,這次我徹底的縮小了文件體積。真是一大幸事啊。不過,如果你在編譯的時(shí)候發(fā)現(xiàn)任何的問題??梢栽谖业腂log響應(yīng)文件的后面提出,最好留下你的郵箱地址,這樣我就能以最快的速度回復(fù)你。同時(shí)希望你能關(guān)注我的文章。
http://blog.csdn.net/visioncat/ 。當(dāng)然本系列文章還沒有結(jié)束。還在補(bǔ)充中。因?yàn)榍捌诤苊?,所以幾個(gè)月沒有更新造成了有人誤認(rèn)為我的文章結(jié)束了。哈,不好意思。

補(bǔ)充內(nèi)容:
  從讀者的回復(fù)中,發(fā)現(xiàn)原來本文還是有些地方不很清楚。因此,在這里做一個(gè)小小的補(bǔ)充。
  讀者提出,是否能給出一個(gè)更簡單的wxWidget的例子。所以,我在這里給出一個(gè)簡單的makefile文件和一個(gè)main.cpp文件給各位。


#makefile.txt
#這個(gè)Makefile是針對(duì)使用Dll的wxWidget
#請(qǐng)將下面的wxPath的參數(shù)./改成你wxWidget的安裝目錄
wxPath=./

CF=-O2  -DHAVE_W32API_H -D__WXMSW__    -I$(wxPath)/include -I$(wxPath)/lib/gcc_dll/msw -Wall -I. -DWXUSINGDLL -I$(wxPath)/samples -DNOPCH

LF=-mthreads -L$(wxPath)/lib/gcc_dll -Wl,--subsystem,windows -mwindows  -lwxmsw25_core  -lwxbase25   -lwxtiff -lwxjpeg -lwxpng -lwxzlib  -lwxregex -lwxexpat   -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lodbc32

#Makefile結(jié)束


//main.cpp
//這個(gè)文件是使用Dll的wxWidget的主程序,是一個(gè)窗口(空白)

#include <wx/wx.h>

class MainApp:public wxApp
{
public:
 virtual bool OnInit(void);
private:
 wxFrame *mainFrame;
   
   
};

IMPLEMENT_APP(MainApp)

bool
MainApp::OnInit()
{
 mainFrame = new wxFrame((wxFrame*) NULL, -1, "wxWindows");
 mainFrame->Show(TRUE);
 
 return TRUE;
}

//main.cpp結(jié)束

 

好了,這次的補(bǔ)充到這里就結(jié)束了。




STUDIO軟件開發(fā)組(SDT)
STUDIO Development Team
北斗星君(黃庠魁)

Dev-Cpp/Mingw32 環(huán)境介紹(10)

上文回顧:
在上一文中,我向各位介紹了如何使用Dev-Cpp/MinGW來生成wxWidget。我想你們一定是早已經(jīng)把這個(gè)wxWidget做成工程文件了。有關(guān)工程文件的制作,請(qǐng)看第十一章。
前一階段比較忙,所以對(duì)于MinGW介紹的更新幾乎是停止了(我在研究一些操作系統(tǒng)的寫法)。再加上我對(duì)于現(xiàn)在文章的發(fā)展方向很迷茫,所以也想不出再介紹一些什么。所以也就沒有寫。如果各位有什么建議,我希望能看到你們提出來。

第十五章 SDL的下載和安裝

  對(duì)于在Win32下的用戶一定會(huì)對(duì)SDL很陌生,因?yàn)槟銈儚膩頉]有聽說過。不過對(duì)于Linux下的用戶就不同了,因?yàn)長inux下的跨平臺(tái)游戲開發(fā)工具就是SDL。不過,我這里介紹SDL并不是主張游戲,而已介紹一下MinGW的游戲開發(fā)環(huán)境。當(dāng)然,SDL除了開發(fā)游戲還有很多其他的用途,我希望你們能善用她。其實(shí),在Win32下的游戲開發(fā)不一定只有DirectX。SDL也是非常強(qiáng)大的。當(dāng)然如果你用的是MS-C,那么你的SDL就是建立在DirectX上了。不過,她的穩(wěn)定性我可不能保證。因?yàn)镾DL的官方網(wǎng)站認(rèn)為,MinGW的這種編譯是安全版本……

  SDL是一組包含若干媒體操作的工具庫。個(gè)人覺得非常不錯(cuò)。你可以從網(wǎng)上免費(fèi)獲得她。你可以從她的官方網(wǎng)站 http://www./ ,或者我常去的 www. 上找到她。如果你想在MinGW下制作SDL的程序,那么你必須下載 SDL-devel-1.2.8-mingw32.tar.gz 雖然體積大了點(diǎn),但是物有所值。不過,如果你只是想運(yùn)行幾個(gè)SDL的軟件,那么下載一個(gè)運(yùn)行庫就可以了,體積小巧。

  當(dāng)你下載完成后,你已經(jīng)成功的三分之一了。下面我就要教你如何安裝和設(shè)置這個(gè)SDL了。

  打開你的壓縮包,將里面的文件復(fù)制到一個(gè)新建的目錄中,我現(xiàn)在假設(shè)這個(gè)目錄是 (SDL_PATH)。當(dāng)然,如果你的計(jì)算機(jī)上沒有解壓縮的工具,那么你可以從 www. 上下載GNUWin32中的解壓縮工具,tar,gzip。如果你想偷懶,那么可以直接將要所包里的東西直接復(fù)制到Dev-Cpp或者M(jìn)inGW的目錄中。并跳過對(duì)編譯器的設(shè)置。

  現(xiàn)在我來說一下文件夾中文件的作用。

test/ 目錄中的文件都是一些測(cè)試文件,你可以用她來測(cè)試你的SDL是否安裝成功。所以,你可以在安裝設(shè)置完成后刪掉她,如果你愿意的話。
lib/  目錄中的文件是一些庫文件,你在開發(fā)中必須要使用到他們,所以千萬別刪。
include/ 目錄中是頭文件,和lib/中的文件一樣重要
docs/ 中的文件是SDL的教程,你可以從中學(xué)會(huì)如何操作SDL。雖然是英文的,但是還是寫的不錯(cuò)的,基本不需要很好的英文基礎(chǔ)就可以讀懂。
bin/ 中的文件是SDL程序的運(yùn)行庫,在開發(fā)中不需要,但是在運(yùn)行時(shí)就有大用處了。

  接下來,我們?yōu)镈ev-Cpp設(shè)置一下環(huán)境變量。在你的工程中將 (SDL_PATH)/lib 添加入你的庫路徑中。將 (SDL_PATH)/include/SDL 添加入你的頭文件路徑中。這些我都在前面介紹過了。如果你是MinGW的話,記得在編譯的時(shí)候添加哦。

  對(duì)于項(xiàng)目,我們除了添加路徑,還要為程序鏈接提供庫。具體的參數(shù)如下。

-lSDL -lSDL.dll -lSDLmain

  上面是在你鏈接的時(shí)候,讓ld從 libSDL.a libSDL.dll.a libSDLmain.a 中抽取函數(shù)。

  一切,都設(shè)置好了,我們就來編譯一個(gè)例子看看。

  現(xiàn)在,我們就用test中的一個(gè)文件來作測(cè)試吧。為了方便各位的理解,我這里就直接使用MinGW了,跳過Dev-Cpp的操作,因?yàn)閷?duì)IDE的操作確實(shí)很難說清楚,有時(shí)候一大段的內(nèi)容只說清楚了一個(gè)很簡單的內(nèi)容。
 
  我們從test目錄中將文件 testwin.c sample.bmp復(fù)制到你的工作目錄下(我通常會(huì)用一個(gè)WorkHome來放一些寫的程序,這樣不會(huì)東一個(gè)西一個(gè)了)。
  在編譯前,我們先要對(duì)testwin.c做一些小小的修改,用Dev-Cpp打開testwin.c。當(dāng)然記事本也可以。將開頭那段中,#include "SDL.h" 改成 #include <SDL.h>。然后保存退出(下面我們將不用Dev-Cpp)了。
  然后我們寫一個(gè)MakeFile.txt的文件,用來生成SDL程序。

#MakeFile.txt

all:
 gcc -I"(SDL_PATH)/include/SDL" -c testwin.c -o testwin.o
 gcc -L"(SDL_PATH)/lib"  -mwindows -lmingw32 -lSDLmain -lSDL -lSDL.dll -o testwin.exe testwin.o

#MakeFile.txt End

  最后我們使用命令提示符,在 testwin.c sample.bmp MakeFlie.txt 所在的目錄下輸入如下命令(但是首先你的系統(tǒng)必須做第一章那樣的設(shè)置)。

make -f makefile.txt

  如果沒有任何問題你就得到了個(gè)名為testwin.exe的程序。

  當(dāng)然,現(xiàn)在你還不能運(yùn)行她。因?yàn)槟銢]有SDL.dll。你現(xiàn)在可以從bin目錄中將SDL.dll復(fù)制到testwin.exe所在的目錄中去了。現(xiàn)在可以運(yùn)行了。當(dāng)然,在你運(yùn)行的目錄中會(huì)出現(xiàn)兩個(gè)文件。stdout.txt和stderr.txt。這兩個(gè)是輸出文件。


  你現(xiàn)在可以對(duì)test中的一些例子進(jìn)行編譯了。當(dāng)然,還是要對(duì)源碼做一些小修改。如果你覺得你以后會(huì)經(jīng)常使用她,那么你就可以將她做成工程文件,便于以后生成。
  好了,直到現(xiàn)在,你對(duì)SDL的認(rèn)識(shí)也就成功了三分之二,為什么是三分之二呢?因?yàn)檫€有三分之一的成功路程是你自己在對(duì)SDL的了解時(shí)走出來的。我不喜歡什么都手把手的教,什么都手把手的學(xué)。只有自己學(xué)會(huì)了,才是真正屬于自己的。別人告訴你的那還是別人的。不過我還是很樂意解答你在學(xué)習(xí)使用中遇到的問題的。

文外音:
其實(shí),我個(gè)人還是比較喜歡SDL的。原本想用SDL來做前面對(duì)Dev-CPP環(huán)境設(shè)置的介紹的。不過,后來發(fā)現(xiàn)SDL的網(wǎng)站暫時(shí)關(guān)閉了。所以,不得不用GTK來做介紹。在后面的一文中,我將在次將GTK推上我們的教程中。至于原因,是因?yàn)樵瓉淼膬?nèi)容只是為了介紹如何設(shè)置Dev-Cpp才引入的。下一篇,我是要以GTK為介紹重點(diǎn)。敬請(qǐng)期待。本系列文章還在繼續(xù)中(也許要等我退休了才能寫完吧,不知道這個(gè)編譯器的公司會(huì)不會(huì)給我勞務(wù)費(fèi)啊?)。


 STUDIO軟件開發(fā)組(SDT)
STUDIO Development Team
北斗星君(黃庠魁)

 Dev-Cpp/Mingw32 環(huán)境介紹(11)

上文回顧

  在上一篇文章中我向各位介紹了有關(guān)SDL的安裝和設(shè)置。希望各位能夠從中受益,按照上次的所說的。這次我們將要安裝GTK運(yùn)行與開發(fā)庫。當(dāng)然,這一切都是在Win32下進(jìn)行的。希望你們能夠愛上這個(gè)。

第十六章 GTK的下載和安裝

  GTK?很多人會(huì)好奇,既然有了MFC為什么還要GTK?其實(shí),MFC并不是跨平臺(tái)的GUI。而GTK可以在多平臺(tái)上運(yùn)行。如Linux,Mac。當(dāng)然,也包括Win32。如果你想讓你的程序在一處編寫,多處編譯的話。GTK是一個(gè)非常不錯(cuò)的GUI。
  GTK在前面已經(jīng)介紹過如何通過安裝程序來安裝。但是,對(duì)于那些比較新的庫,可能你們就無法安裝了。而且,也不夠自由。下面,我就介紹一下如何從GTK官方下載安裝GTK的Win32版本。對(duì)于GTK的介紹,我想我不用介紹了吧。

  GTK的官方網(wǎng)站 http://www. 找到Win32的下載地址。在上到這個(gè)網(wǎng)站的下載頁面后,你會(huì)發(fā)現(xiàn)很多下載鏈接。這些都是GTK的一部分,你可以按照你的需要來下載相映的數(shù)據(jù)文件。不過,你必須下載如下幾個(gè)文件,這是必須的。

GLib
libiconv
gettext-runtime
GTK+
atk
Pango

  如果你只是運(yùn)行的話,就只要下載runtime就可以了,如果你要開發(fā)的話,那 還 要下載帶有dev的數(shù)據(jù)文件(注意其中還有一個(gè)是源文件)。在這篇文章寫的時(shí)候,最新穩(wěn)定的gtk是2.6版本的。

  在下載完成以后,我們就只要壓縮到一個(gè)目錄中就可以了,不過,注意,對(duì)于Dev和Runtime要分別壓縮到兩個(gè)目錄中,免得混淆。
  在將Dev中的

\include\gtk-2.0
\lib\gtk-2.0\include
\include\atk-1.0
\include\pango-1.0
\include\glib-2.0
\lib\glib-2.0\include

添加為頭文件路徑

\lib

添加為庫文件路徑

在鏈接時(shí)添加如下參數(shù)
-lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv
在編譯時(shí)添加如下參數(shù)
-mms-bitfields

這樣,我們的GTK 開發(fā)庫就算安裝完成了。

不過,運(yùn)行的的話就有問題了,還要對(duì)系統(tǒng)設(shè)置一下。

將bin文件夾和lib文件夾的路徑添加入系統(tǒng)Path變量中就可以了。或者,你將lib文件夾內(nèi)的文件復(fù)制到bin文件夾中,只將bin的路徑添加為系統(tǒng)變量也可以。(后者是官方網(wǎng)站建議的)。

至此我們的GTK開發(fā)環(huán)境和運(yùn)行環(huán)境都設(shè)置好了。下面給出一組簡單的Makefile和例子代碼。

#MakeFile.txt
CC=gcc
GTK_PATH=
CFLAGS=-mms-bitfields -I"$(GTK_PATH)\include\gtk-2.0" -I"$(GTK_PATH)\lib\gtk-2.0\include" -I"$(GTK_PATH)\include\atk-1.0" -I"$(GTK_PATH)\include\pango-1.0" -I"$(GTK_PATH)\include\glib-2.0" -I"$(GTK_PATH)\lib\glib-2.0\include"

LFLAGS=-L"$(GTK_PATH)\lib" lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv

all:
 $(CC) $(CFLAGS) -c gtk.c -o gtk.o
 $(CC) $(LFLAGS) -o gtk.exe gtk.o

#MakeFile.txt End


//gtk.c

#include <gtk/gtk.h>
static void destroy( GtkWidget *widget,  gpointer data )
{
 gtk_main_quit ();
}
int main( int argc,  char *argv[] )
{
 GtkWidget *window;
 gtk_init (&argc, &argv);
 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 gtk_window_set_title(GTK_WINDOW(window),"GTK+ Programe");
 g_signal_connect (G_OBJECT (window), "destroy",
 G_CALLBACK (destroy), NULL);
 gtk_widget_show (window);
 gtk_main ();
 return 0;
}

//gtk.c end

  至此,有關(guān)GTK的設(shè)置和安裝就到這里介紹完成了。由于前面對(duì)于設(shè)置的內(nèi)容有過詳細(xì)的介紹。所以,這里就不做太深入的操作說明了。如果有不明白的,可以在這里提出也可以尋找以前的內(nèi)容。由于本系列文章有很多地方轉(zhuǎn)載,所以如果您是在轉(zhuǎn)載的網(wǎng)站上查看。那么http://blog.csdn.net/visioncat/上能找到,完整的,最新修正后的文章。同時(shí),你也可以在上面相應(yīng)的文章下,提出您的問題和建議以得到最直接的幫助。

文外音:
在這篇文章以后,MinGW/Dev-C++ 將進(jìn)入中級(jí)篇介紹了。原本那些只對(duì)Dev-Cpp的設(shè)置和操作的介紹將基本停止(只在必要時(shí)說明)。轉(zhuǎn)而對(duì)MinGW和其他GCC的Win32編譯器做更仔細(xì)的介紹以供您深入使用。我想您也不想總是停留在某個(gè)IDE下使用Dev-Cpp吧。其實(shí),Dev-Cpp中的核心編譯器就是MinGW。所以,您在中級(jí)篇中讀到的內(nèi)容同樣能夠應(yīng)用到Dev-Cpp中。有些你可以對(duì)Dev-Cpp做一些修改便可以成功使用中級(jí)篇的內(nèi)容。不過,我還是會(huì)以MakeFile的介紹為主。就好像我第十五,十六章所展示的一樣。不過,內(nèi)容會(huì)更為豐富。敬請(qǐng)期待。


STUDIO軟件開發(fā)組(SDT)
STUDIO Development Team
北斗星君(黃庠魁)

Dev-Cpp/Mingw32 環(huán)境介紹(12)

上文回顧:
在上一篇文章中,我們了解了如何在MinGW中設(shè)置GTK和使用GTK。從這一篇開始,我我們就要開始進(jìn)入中級(jí)篇了。也就是說,我們主要以MinGW和其他GCC在Win32下的使用為主。而不是如同原來只介紹那些操作IDE,安裝組件等。如果說,以前我們是在跑道上,那么現(xiàn)在我們就要起飛了。所以,我們會(huì)比較注重以MakeFile來說明程序的配置。同時(shí)會(huì)帶上一些Dev-Cpp的設(shè)置。

第十七章 在Win32下安裝GCC的過程

  有很多人會(huì)問,我們既然有了Dev-Cpp這樣簡單的安裝工具,為什么還要去自己學(xué)習(xí)如何安裝MinGW等GCC編譯器呢?不是多此一舉么?要知道,從現(xiàn)在開始,你已經(jīng)是在讀中級(jí)篇的內(nèi)容了,你也不想只知道通過安裝Dev-Cpp來安裝MinGW吧。既然你已經(jīng)選擇了GCC,那么知道如何安裝GCC在Win32下的一些變體也是一個(gè)中級(jí)學(xué)生該知道的內(nèi)容。

  MinGW,我想不用介紹了。因?yàn)镈ev-Cpp中自帶的就是這個(gè)。Cygwin,一個(gè)在Win32下模擬Unix中斷的軟件組,其實(shí)對(duì)于真正的Win32開發(fā)來說,Cygwin并不是首選,所以我這里也就省略了。Djgpp,一個(gè)可以在Win32下開發(fā)16位程序的軟件,當(dāng)然也可以讓你的軟件在DOS下運(yùn)行。通過上面的一些介紹,我想各位一定知道,我們要安裝的編譯器就是,MinGW,Djgpp。

  MinGW的安裝,其實(shí)非常簡單。你可以從 http://www.MinGW.org 上下載最新的版本。不過建議你看仔細(xì)了,因?yàn)橛行┻€是在測(cè)試中的。所要下載的文件如下(默認(rèn)情況下我所安裝的是C語言,而不包括C++,如果需要,只要下載C++的文件就可以了)。

binutils    其中包括ld,as等編程需要的程序組
gcc-core    C語言編譯器
mingw32-make-3.80.0-3    Make程序
mingw-runtime    其中包括編譯程序的大部分頭文件和庫文件(不包括Win32API)
w32api    這個(gè)里面是Win32 API 的頭文件和庫文件

如果,你需要其他的比如Java,C++,Ada你都可以從上面的網(wǎng)址中下載到。Good Luck。

下載后,全部解壓縮到一個(gè)目錄中,比如 MinGW目錄中。如果存在重名現(xiàn)象,通常都是 許可證等的文件,可以履帶掉或者不復(fù)制。
因?yàn)?,這些程序包都是使用GNU的壓縮工具生成的,所以。文件名不是zip。你可以用WinRAR來開?;蛘呤褂?GNUWin32 的工具來解壓縮。
http://www.
下載tar程序。
如果你下載的文件是 *.tar.gz那么下載 gzip
如果你下載的文件是 *.tar.bz2那么下載 bz2程序(不推薦這個(gè))

然后,使用命令
gunzip (文件名.tar.gz)
tar -xvf (文件名.tar)

就可以解開了。

其實(shí),這些工具的安裝都是非常簡單的。我個(gè)人比較喜歡那些直接解壓縮的工具。這樣的話,不會(huì)生成什么其他的垃圾文件。


  Djgpp,這個(gè)可能對(duì)各位比較陌生。這個(gè)是在DOS下的GCC。你沒有看錯(cuò)。這的確是在DOS下的GCC。你可以在MS-DOS的啟動(dòng)盤上運(yùn)行Djgpp的程序。你也可以在FreeDOS上的啟動(dòng)盤上做這些。這的確是真的。說起來,Djgpp的安裝會(huì)比較麻煩。
http://www./djgpp/ 上你可以下載到你所要的文件,這個(gè)是Djgpp的官方網(wǎng)站。
在下載的頁面上有一個(gè)為用你給的參數(shù)來為你選擇下載文件的頁面。你可以更具自己的要求來選擇。
我這里,下載的是(時(shí)間比較久了,肯能已經(jīng)很老了)
bnu216b.zip
djdev203.zip
gcc400b.zip
gdb611b.zip
mak3791b.zip
txi48b.zip

將這些文件全部解壓縮到一個(gè)目錄中。然后,為系統(tǒng)設(shè)置變量。

DJGPP=(Djgpp的安裝路徑)/djgpp.env

這樣就算安裝好了。因?yàn)?,是在中?jí)篇了。所以,很多東西不會(huì)像以前那樣一步步的教了。

 Cygwin,雖然前面說不想介紹。但這里還是介紹一下吧。
可以先從Cygwin的官方網(wǎng)站下載setup.exe這個(gè)安裝程序只是一個(gè)網(wǎng)絡(luò)安裝版本。很多東西還是要你從網(wǎng)上下載的。你可以使用他直接從網(wǎng)上下載。也可以自己下載。下面,我介紹一下我的安裝方式。
http://mirrors./sources.redhat.com/cygwin/release/
從上面的地址中,獲得setup.ini這個(gè)配置文件。從而獲得依賴性。
下面我從中抽取一段來解釋一下。

@ gcc
sdesc: "C compiler upgrade helper"
category: Devel
requires: cygwin ash binutils w32api mingw-runtime libintl3 gcc-core gcc-g++ gcc-mingw-core gcc-mingw-g++
version: 3.4.4-1
install: release/gcc/gcc-3.4.4-1.tar.bz2 46 c616cffee0f344c37fd4e045a7a87054
source: release/gcc/gcc-3.4.4-1-src.tar.bz2 46 c616cffee0f344c37fd4e045a7a87054
[prev]
version: 3.3.3-3
install: release/gcc/gcc-3.3.3-3.tar.bz2 46 c616cffee0f344c37fd4e045a7a87054
source: release/gcc/gcc-3.3.3-3-src.tar.bz2 46 c616cffee0f344c37fd4e045a7a87054

@ gcc是包名。比如這里就是GCC工具。
requires: 是依賴的包,比如 cygwin 你可以通過搜索 @ cygwin 在這個(gè)文件里找到這個(gè)包的信息。
install:  是安裝的文件位置。
source: 就是這個(gè)程序的源文件地址(通常我們不下載)。

按照這種方式你就可以然后,你把這些文件按照網(wǎng)站上的目錄結(jié)構(gòu)保存好。然后運(yùn)行setup.exe 使用本地安裝就可以了。

問外音:
我不喜歡Cygwin,因?yàn)橛X得這個(gè)東西總喜歡在注冊(cè)表里做一些修改。
其實(shí),真正深入GCC的編程就會(huì)發(fā)現(xiàn),不論是MinGW還是Cygwin或者是Djgpp都是不完全的。所以,近期我準(zhǔn)備安裝一個(gè)FreeBSD玩玩??赡芤院缶蜁?huì)徹底放棄了這個(gè)Windows了。
下一篇文章,我將繼續(xù)深入介紹 GCC for Win32 環(huán)境的內(nèi)容。對(duì)于你們深入了解GCC有很大的幫助。其實(shí),很多人都對(duì)GCC有誤解,總以為MS-C++如何好。其實(shí),GCC也并不比MS-C++差啊。畢竟GCC是Linux下的一個(gè)優(yōu)秀開發(fā)環(huán)境,Linux內(nèi)核等都是用GCC編譯出來的。MS-C++能編譯出Win32內(nèi)核么?對(duì)了,Win32的內(nèi)核源文件根本沒有,又哪來的編譯一說?


 STUDIO軟件開發(fā)組(SDT)
STUDIO Development Team
北斗星君(黃庠魁)


Dev-Cpp/Mingw32 環(huán)境介紹(13)


上文回顧:

在上一文中,我們了解了如何在Win32下安裝GCC的移植版本。那么,從這一章開始。我們將深入GCC的編程世界。不過,有一點(diǎn)我想說明,那就是:當(dāng)你越深入GCC,你就覺得Win32下的GCC越不夠用。所以,Win32下的GCC作為一個(gè)開發(fā)應(yīng)用程序的編譯器,那當(dāng)然是足夠了。問題是,如果你要將GCC的潛力全部開發(fā)出來。那么你就必須在Unix或者類Unix系統(tǒng)上使用。如FreeBSD就是不錯(cuò)的選擇。我最近也要遷移到這個(gè)系統(tǒng)下了。


第十八章 GCC下的匯編應(yīng)用


這一章中,我將向各位展示GCC下的匯編語言。如果,你是計(jì)算機(jī)科班出身。那么,請(qǐng)你注意了。你不要以為這里的匯編語言你學(xué)過。因?yàn)椋?/span>GCC所使用的匯編風(fēng)格和在高校中學(xué)的有很大的出入。一不小心就會(huì)出錯(cuò)。


在開始之前,我先介紹一下匯編的風(fēng)格問題。匯編語言的風(fēng)格基本分為兩種。第一種是Inter匯編語言風(fēng)格。第二種是AT&T匯編語言風(fēng)格。前者,是現(xiàn)在國內(nèi)高校學(xué)習(xí)的。后者,是GCC所使用的。相對(duì)來說,我個(gè)人偏好AT&T,因?yàn)椴粫?huì)造成不好的編程習(xí)慣,而且Linux內(nèi)核中的匯編部分也是用這種風(fēng)格寫的。

匯編語言的風(fēng)格,只是一種格式,對(duì)執(zhí)行沒有任何的影響。所以,不論你學(xué)的是Inter匯編風(fēng)格,還是AT&T除了編寫部分有不同外。其他的知識(shí)都是一樣的。


AT&T匯編語言風(fēng)格,與Inter的風(fēng)格最大的差異是,他們的操作數(shù)是相反的。比如,


//AT&T

movb $0x01,%al

movw $0x0023,%ax

這里,我們可以看到。立即數(shù)前是 $ 寄存器前是 % 。還有,操作順序是相反的。這就是AT&T的特點(diǎn)。有關(guān)AT&T更多的內(nèi)容。請(qǐng)到網(wǎng)上查詢一下。


下面開始正題。在GCC下使用匯編。因?yàn)?,我們?cè)谥屑?jí)篇開始,就介紹了許多GCC移植版本的安裝。而且,他們的適用范圍也不同。所以,在沒有特殊的提示前。我們都使用MinGW。


//myas.s

.text

.global _myas

_myas:

pushl %ebp

movl %esp,%ebp


movw $0x0001,%ax


popl %ebp

ret

上面是一段匯編代碼,在GCC中,匯編代碼通常都是以 s 為后綴名的。這段代碼只是返回一個(gè)1,不接受任何參數(shù)。

.global _myas 這是定義 _myas 這個(gè)函數(shù)名。

其他的,我想就不用介紹了。除了操作數(shù)順序不同。其他的和Inter一樣。


//main.c

#include <stdio.h>

#include <stdlib.h>

int myas(void);

int main(int argc, char *argv[])

{

int r;

r=myas();

printf(“%d”,r);

return(0);

}

上面那段代碼,就是把myas的參數(shù)打印到終端上。是不是很簡單?下面我們看看如何在Win32下將這些文件編譯出來。

>gcc -c myas.s -o myas.o

>gcc -c main.c -o main.o

>gcc -o main.exe main.o myas.o

這樣,我們的代碼就算鏈接成功了。運(yùn)行一下看看吧。

以上,是在C代碼外,使用匯編。在C代碼內(nèi)使用的匯編的方式和平時(shí)VC的方式是一樣的。使用,

__asm__(“movw $0x0000,%ax\n\t”);

就可以在C語言中嵌入?yún)R編代碼了。方便好用嘛。

如何?這樣的話,就可以讓你的代碼運(yùn)行效率得到很大的提升了。


文外音:

是不是這次的文章好像在結(jié)構(gòu)上好看很多?因?yàn)?,我原來都是使用寫字板編寫的。這次使用的是,OpenOffice這個(gè)軟件。只要將他生成的HTML代碼貼到Blog上,就可以了。很方便的。而且,是免費(fèi)的工具哦。我用的是英文版的,覺得很用著很舒服。

看了中級(jí)篇的內(nèi)容,是否覺得自己有很多不足呢?的確,我們學(xué)的東西還很多。不過,當(dāng)你真正的用GCC時(shí),你就會(huì)覺得這些在Win32下的東西有些不夠用了。中級(jí)篇的內(nèi)容,將不再是以前那樣重點(diǎn)寫安裝和使用了。而是把重點(diǎn)放在更深一層的應(yīng)用方面。如果,你覺得在看本文時(shí)有什么疑惑,或者想法。可以到我的Blog上發(fā)表。

如果,您好轉(zhuǎn)載我的文章。請(qǐng)?jiān)谖恼鲁鎏帉懨?,我?/span>Blog地址,以便有疑惑的兄弟們能夠及時(shí)的提出問題,并得到回答。謝謝。

Blog地址:http://blog.csdn.net/visioncat/




STUDIO軟件開發(fā)組(SDT)
STUDIO Development Team
北斗星君(黃庠魁)


Dev-Cpp/Mingw32 環(huán)境介紹(14)


上文回顧:

在上一文中,我們了解了如何在GCC下使用匯編語言。后來,由于個(gè)人生活環(huán)境的原因所以遲遲沒有發(fā)布新的內(nèi)容。當(dāng)然,我這里并不想說一些不愉快的事情。不過,我沒有想到居然中國還會(huì)有那么沒有道德的人存在。由于,我同宿舍的一個(gè)溫州人,邀請(qǐng)N個(gè)同學(xué)通宵看電影,影響我睡眠,造成我睡眠嚴(yán)重不足。更可惡的是對(duì)我進(jìn)行人權(quán)侵犯!所以,就沒有時(shí)間靜下心來寫東西了。今天剛讓事情平息了一些,就想到了我的朋友你,所以馬上就獻(xiàn)上最新的文章。

第十九章 GCC下編寫Python擴(kuò)展

在這一章中,我向大家介紹一些有關(guān)Python語言的擴(kuò)展編寫的基礎(chǔ)知識(shí)。

如果,你對(duì)Python了解了。那么你可以跳過這段,閱讀后面的內(nèi)容。如果不是,那么還是請(qǐng)您耐心了解一下Python吧。Python是一種解釋性語言,而且歷史悠久。他是跨平臺(tái),面向?qū)ο?,使?/span>C編寫,可擴(kuò)展的。他從設(shè)計(jì)一開始就是為面向?qū)ο笤O(shè)計(jì)的。所以,可以說,Python是一種不錯(cuò)的語言。有關(guān)Python的更多內(nèi)容介紹,你可以看看我曾經(jīng)寫的另一篇Python的文章《略談Python語言》。


Python可以使用C這一可移植的語言來進(jìn)行擴(kuò)展。而且,由于是用C寫的。所以,擴(kuò)展的速度可以和靜態(tài)語言相比。所以,可以說會(huì)寫Python的擴(kuò)展可以大大的提高項(xiàng)目的運(yùn)行效率。當(dāng)然還有其他的好處。


不過,本文并不是介紹Python的語言的,也不是專門介紹用C擴(kuò)展Python的。所以,就像我曾經(jīng)所說的,我本系列的文章只是為你開啟一扇扇的門。


下面我就開始我的的主題了。


在開始一切之前,請(qǐng)您先到 http://www. 上下載最新的解釋器,并安裝。在我寫本文的時(shí)候,最新的版本是Python 2.4.2 。這里有關(guān)Python的安裝,我就不一步步的詳細(xì)介紹了。


開始寫程序吧!


首先,我先給出一組簡單的Python代碼吧。

第一個(gè)文件為add.py文件,這個(gè)文件將是會(huì)被導(dǎo)入的。

add.py

def add(x,y):

return(x+y)


第二個(gè)文件為main.py文件,這個(gè)文件將是會(huì)被執(zhí)行的。

#main.py

import add

print add.add(256,512)


請(qǐng)將上面兩個(gè)代碼使用指定文件名(大小寫也要注意,雖然在Win32下是不分大小寫的)寫入同一個(gè)目錄下。然后,使用DOS終端在那個(gè)目錄下輸入 main.py 你將會(huì)看到他的輸出為 768 。


下面我簡單介紹一下兩個(gè)代碼的意思。

第一個(gè)文件中,定義了一個(gè)add函數(shù),傳入兩個(gè)參數(shù),分別命名為xy。函數(shù)的作用是返回x+y的數(shù)值。

第二個(gè)文件中,我們首先導(dǎo)入了add.py這個(gè)文件,并把他的名字空間放到add空間中。然后,我們調(diào)用add中的add函數(shù),并傳入256512。而且,最后在終端上顯示add函數(shù)的返回值。


也許你會(huì)問,這不是介紹C的么?怎么又介紹Python了。其實(shí),這個(gè)是為后面打下基礎(chǔ)。


接著,我們?cè)囋囉?/span>CPython中實(shí)現(xiàn)add.py的功能吧。

//add.c

#include <Python.h>


static PyObject* add(PyObject *self, PyObject *args);


static PyObject* add(PyObject* self, PyObject* args)

{

int x=0 ;

int y=0;

int z=0;

if (! PyArg_ParseTuple(args, "i|i", &x, &y))

{

return NULL;

}


z=x+y;

return Py_BuildValue("i", z);

}


static PyMethodDef addMethods[] =

{

{"add", add, METH_VARARGS, "Execute a shell command."},

{NULL, NULL, 0, NULL}

};


PyMODINIT_FUNC initadd()

{

Py_InitModule("add", addMethods);

}


這段代碼也許你會(huì)覺得有些糊涂,這是什么東西?下面我為你一一介紹。

首先的#include <python.h>是必須被導(dǎo)入的。這個(gè)在Python的安裝目錄的include目錄中有。其次,我們定義了一個(gè)函數(shù)叫add。由于Python中的所有東西都是對(duì)象。所以,這里在C中,為了于Python通訊,C傳給Python的,Python傳給C的都是PyObject這個(gè)數(shù)據(jù)類型。下面PyArg_ParseTuple這一句,是將傳入的數(shù)據(jù)轉(zhuǎn)換成C類型的。Py_BuildValue這個(gè)函數(shù)是將C數(shù)據(jù)類型轉(zhuǎn)化成Python的數(shù)據(jù)類型,并返回他。

接著,我們要告訴Python,我們C中的Python的函數(shù)有那些。所以,addMethods這個(gè)數(shù)據(jù)組,就是為了存放這些數(shù)據(jù)的。這個(gè)就是一個(gè)列表。最后那個(gè)initadd這個(gè)函數(shù)是在Python導(dǎo)入模塊時(shí)初始化用的。必須存在。而且,比如以 init模塊名的形式在命名。其中Py_InitModule函數(shù),是告訴PythonaddMethods這個(gè)列表所定義的內(nèi)容,加入add這個(gè)名字空間中。

最后,我把代碼在書寫一遍。不過這次,我會(huì)用紅色的部分標(biāo)出套路的代碼部分,也就是必須需要的地方。

#include <Python.h>


static PyObject* add(PyObject *self, PyObject *args);


static PyObject* add(PyObject* self, PyObject* args)

{

int x=0 ;

int y=0;

int z=0;

if (! PyArg_ParseTuple(args, "i|i", &x, &y))

{

return NULL;

}


z=x+y;

return Py_BuildValue("i", z);

}


static PyMethodDef addMethods[] =

{

{"add", add, METH_VARARGS, "Execute a shell command."},

{NULL, NULL, 0, NULL}

};


PyMODINIT_FUNC initadd()

{

Py_InitModule("add", addMethods);

}


最后,我們來把這個(gè)代碼編譯一下吧。你也許會(huì)問,既然是跨平臺(tái)的,是否對(duì)于不同的操作系統(tǒng),要使用不同的編譯方式。答案是否定的。Python自帶的編譯腳本可以為你完成一切的編譯過程。不過,你要在開始要把你的MinGW設(shè)置進(jìn)環(huán)境變量中。具體可以看本系列文章第一章到第三章。

下面給出Python編譯安裝腳本的文件。

#!/usr/bin/python

#setup.py


from distutils.core import setup, Extension


module1 = Extension(name='add, sources = ['add.c'])


setup (name = 'PackageName', version = '1.0', description = 'This is a demo package', ext_modules = [module1])

這段代碼是告訴Python如何來組成你的包。首先,第一句#!/usr/bin/python 是在BSD/Linux/Unix下告訴系統(tǒng)使用什么解釋器運(yùn)行代碼在Win32下有和沒有沒什么區(qū)別。

Module1=Extension('mytest',sources=['add.c']是定義你第一個(gè)要編譯擴(kuò)展的信息。后面的setup函數(shù),就是用來定義包的,其中在ext_modules中就在列表中加入了我們剛才定義的模塊信息。這樣,Python會(huì)更具你給的信息,更具不同的平臺(tái),操作系統(tǒng)自動(dòng)的編譯出合適的擴(kuò)展文件。


dos終端下輸入setup.py build -cmingw32 如果沒有錯(cuò)誤,那么在編譯后,你會(huì)在build目錄中的子目錄中找到add.pyd這個(gè)文件,這個(gè)就是PythonC擴(kuò)展文件。把第一個(gè)例子中的add.py從目錄中移除,并刪除add.pyc這個(gè)文件(這個(gè)文件會(huì)在Python導(dǎo)入時(shí)自動(dòng)生成,方便下次導(dǎo)入時(shí)快速執(zhí)行和導(dǎo)入)。再將剛才編譯的add.pyd放到該目錄下。像剛才一樣的運(yùn)行,你看到了什么?和剛才一樣的運(yùn)行結(jié)果。對(duì)的。我這里的C擴(kuò)展就是實(shí)現(xiàn)了剛才Python所定義的功能。怎么樣是不是覺得還有很多不明白?如果你要深入Python的擴(kuò)展編程,你可以看看Python的參考手冊(cè) Python/C API 這部分內(nèi)容。下面列出一些Extension中一些參數(shù)的意義。


include_dirs 定義頭文件的目錄地址,默認(rèn)情況下Python頭文件目錄的地址已經(jīng)被定義了。

library_dirs 定義了庫文件的目錄地址,默認(rèn)情況下Python的庫文件目錄也被包含了。

Libraries 定義在編譯時(shí)要使用的庫文件名,這個(gè)有點(diǎn)像GCC中在-l后面加的參數(shù)。


當(dāng)然,還有其他很多參數(shù)。這里只是列出了常用的幾個(gè)基本參數(shù)名和意義。希望我為你開啟的門夠?qū)挸āH绻信d趣,可以查看Python的參考手冊(cè)。相信對(duì)你一定有很大的幫助。

好了,最后祝你在學(xué)習(xí)的過程中一切順利,Good Luck。并且,希望有什么問題請(qǐng)你盡量提出來。


文外音:

就像我開始所說的,我由于生活環(huán)境的因素造成我遲遲沒有寫新的文章。這一點(diǎn),是讓我剛到非常虧欠于你的。不過,這也是最近一個(gè)月沒有出文章的原因。前一階段我也說過了,沒有創(chuàng)意了。后來,偶然之間找到了中級(jí)篇的指導(dǎo)方向,所以馬上就有了新文章的構(gòu)思。希望我這篇文章能夠讓你們滿意。謝謝你長久以來對(duì)我的支持。因?yàn)橛辛四悖也艜?huì)有不懈的動(dòng)力寫下去。謝謝。如果你有任何的問題請(qǐng)到 http://blog.csdn.net/visioncat/ 上提出你的問題和建議。


STUDIO軟件開發(fā)組(SDT)
STUDIO Development Team
北斗星君(黃庠魁)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多