|
從畢業(yè)到現(xiàn)在,我已經(jīng)編譯過很多系統(tǒng)了。其中大部分為C++程序,部分為Java程序,還有一些網(wǎng)站的程序sample,另外還有些插件程序。當(dāng)然,說是編譯其實(shí)并不全面,編譯是對(duì)C++來說的,其他可能還有部署啊啥的。
現(xiàn)在的時(shí)代已經(jīng)不是重復(fù)制造輪子的時(shí)代,而是怎么利用輪子的時(shí)代,閉上眼睛,你可以聽到open source的呼喚,噢,當(dāng)然,如果你是開發(fā)商業(yè)應(yīng)用的話,請(qǐng)注意許可證污染問題,最好是使用apache和BSD的liscense的程序。不過我們現(xiàn)在討論的是編譯問題,而不是之后的如何使用的問題。
首先,還是說說熟悉的C++吧。大家都知道,C++不是平臺(tái)無關(guān)的,也就是說,對(duì)于這個(gè)平臺(tái),我們要寫一套C++代碼;而對(duì)于另外一個(gè)平臺(tái),我們則基本上要寫另外一套C++代碼。除非你寫的程序是和標(biāo)準(zhǔn)庫(kù)相關(guān)的,否則跳不出這個(gè)圈子。這也是為什么Java一推出就大受歡迎的原因之一。
而C++開發(fā)者們?yōu)榱俗屪约旱某绦蚩梢栽诓煌钠脚_(tái)上面,都可以編譯出平臺(tái)適合的程序出來而不必大量修改代碼,做了非常多的工作(當(dāng)然,對(duì)于我們這些下載他們代碼進(jìn)行編譯的同學(xué)們來說,也帶來了很多麻煩)。到現(xiàn)在為止,我下載編譯的C++程序應(yīng)該有幾十個(gè),當(dāng)然,有些編譯通過了,有些編譯有問題,有些則。。。
在這些程序中,一些是為了linux平臺(tái)編寫的,然后移植到windows平臺(tái)下,這些程序是比較難搞的,在我來說,基本算是最難搞的。
有些程序盡管是windows平臺(tái)下的,但是只有C++文件和makefile文件,而不是我們熟悉的有一個(gè)C++的工程文件,這些程序也比較困難。
下面就是有C++的工程文件的,但是現(xiàn)在VC的版本升級(jí)很多,有的是VC6的,有的是VC2003的,VC2005的,甚至有些居然是VC2008的,不要搞多久,估計(jì)會(huì)有2010的了。這里就又有版本的兼容性問題出來了。
同時(shí),由于大家也共用輪子,所以某些開源項(xiàng)目還使用了其他項(xiàng)目的代碼,但是,一般來說,在下載的時(shí)候,該項(xiàng)目?jī)H僅是提供自己的代碼,而不提供其他項(xiàng)目的代碼,這樣,你就需要去一個(gè)個(gè)的找其他的依賴項(xiàng)目,同時(shí),這些項(xiàng)目也在不斷的升級(jí),所以并不一定你下載最新的代碼能適合使用,而需要某個(gè)特定版本的代碼才可以。
接著就是編譯成靜態(tài)庫(kù)還是動(dòng)態(tài)庫(kù)的問題,然后還有字符集的問題,現(xiàn)在一般是使用unicode的字符集,但是很多的國(guó)外開源項(xiàng)目使用的是multibyte的,同時(shí),還要注意MFC是否使用了,否則一個(gè)不使用MFC,一個(gè)使用,好像又會(huì)有沖突。最后,就是多線程,兩個(gè)版本如果使用不同,也會(huì)出現(xiàn)問題。
在解決這些問題的過程中,你會(huì)不斷遇到各種編譯錯(cuò)誤,最后會(huì)遇到鏈接錯(cuò)誤,而直到現(xiàn)在還報(bào)得讓人很郁悶無語的模板使用錯(cuò)誤就更不用說了。
當(dāng)然,你并不是孤獨(dú)的,當(dāng)你在google中輸入link2001,link2005的時(shí)候,你會(huì)得到成千上萬的結(jié)果,而在你所編譯軟件的論壇或者郵件列表中,你也會(huì)看到其他和你遇到同樣問題的人。
程序員何苦為難程序員?
盡管很感謝那些辛苦寫出代碼,并且不要求回報(bào),直接將其開源的同志們,不過看到這樣的結(jié)果,還是忍不住要聽?zhēng)拙?/span>HOTDOG的歌來發(fā)泄一下。
下面就列出一些我編譯過的項(xiàng)目,來共享一些經(jīng)驗(yàn):
1. Notepad++
臺(tái)灣人寫的,所以對(duì)中文支持比較好,基于scite的內(nèi)核,很多人喜歡用它是因?yàn)樗慕缑嬉约爸С执a折疊,同時(shí)有線條來將代碼進(jìn)行對(duì)齊。
由于該軟件只支持windows平臺(tái),還是挺好編譯的,大家可以在其官網(wǎng)上面下載到源碼,然后編譯一個(gè)試試看。
2. Filezilla
作為最老牌的開源FTP客戶端,filezilla也是一個(gè)很棒的項(xiàng)目,但是,離開學(xué)校后,使用FTP的機(jī)會(huì)是越來越少了,所以編譯完之后,基本就沒有使用的機(jī)會(huì),但是通過這個(gè)項(xiàng)目來學(xué)習(xí)界面控件,真是一個(gè)好的例子,它的界面控件十分豐富。
如果有同學(xué)使用FTP的話,可以以其為基礎(chǔ)來做一些相應(yīng)的修改。
這個(gè)不清楚是否支持其他平臺(tái),但是當(dāng)時(shí)我下載的是VC版本的,編譯也不算很困難。
3. Akelpad
俄國(guó)人寫的用來代替notepad的程序,完全win32API編寫,共有1萬多行代碼,支持插件功能,察看其代碼,是基于richedit控件進(jìn)行擴(kuò)展的。
如果有同學(xué)希望學(xué)習(xí)一下windows API的使用,windows消息機(jī)制等相關(guān)的知識(shí),這是一個(gè)好的參考項(xiàng)目。
編譯很容易,需要注意的是Akelpad3和Akelpad4有了比較大的修改,同時(shí)開發(fā)者似乎也不同了,建議閱讀源碼的時(shí)候最好從Aklepad3開始比較容易入手。
4. UltraVNC
VNC程序,有客戶端和服務(wù)器,服務(wù)器似乎叫winvnc,編譯很容易。
經(jīng)過實(shí)際使用,速度很好,能支持遠(yuǎn)距離控制和傳輸,缺點(diǎn)是分辨率支持不夠,不能夠像windows XP的遠(yuǎn)程桌面那樣全屏,如果對(duì)方桌面分辨率比較高的話,需要左右上下移動(dòng)滾動(dòng)條才能看全,很不方便。
另外就是只能支持公網(wǎng)IP,這是大部分遠(yuǎn)程桌面程序的弱點(diǎn),并不能像QQ的遠(yuǎn)程桌面那樣支持內(nèi)網(wǎng)IP。
如果同學(xué)要研究圖像的遠(yuǎn)程傳輸?shù)裙δ芑蛘咧苯酉胙芯?/span>VNC的協(xié)議等,可以研究一下其代碼,當(dāng)然,如果要研究VNC的協(xié)議,還可以通過監(jiān)聽網(wǎng)絡(luò)來實(shí)現(xiàn),這個(gè)就不說了。
5. eMule的VeryCD版
現(xiàn)在在國(guó)內(nèi),大部分人包括我還是使用的這個(gè)版本。當(dāng)然,其實(shí)還是有很多其他版本在流傳的,包括開源的和不開源的。還有傳說中的天使驢和惡魔驢等等。
這個(gè)編譯就不是非常容易,首先你下載下來的代碼是不完全的,它有好幾個(gè)依賴庫(kù)需要一個(gè)個(gè)去下載,然后各自編譯,最后組成一個(gè)程序。
如果需要研究P2P共享網(wǎng)絡(luò),或者文件共享啊什么的,研究這個(gè)程序會(huì)有幫助,反正我只是將其編譯出來,用這個(gè)下載東西,還發(fā)現(xiàn)里面有幾個(gè)txt文件的小秘密,這里就不說了,大家有興趣自己來玩一下就知道是什么了。
6. Firefox
這個(gè)我就不推薦大家編譯了,作為現(xiàn)在最有名的瀏覽器軟件,支持多個(gè)平臺(tái),其代碼編譯也是極其麻煩的,反正我似乎記得我是半途而廢了。
其有力的競(jìng)爭(zhēng)對(duì)手,同樣出于名門的chrome,大家感興趣也可以試試。
firefox的插件機(jī)制,現(xiàn)在被大家都在模仿,有興趣可以了解了解。
還有就是Javascript引擎。
想看的同學(xué)就去看看好了。RTFC才是進(jìn)步的源泉嘛。
7. AutoHotKey
如果大家讀過善用佳軟兄或者小眾軟件的相關(guān)文章,相信對(duì)AHK就不會(huì)太陌生,現(xiàn)在AutoHotKey和AutoIt兩個(gè)似乎都是開源(如果有誤請(qǐng)糾正我),編譯比較簡(jiǎn)單。而且這兩個(gè)項(xiàng)目似乎本來是從一個(gè)項(xiàng)目發(fā)展分支的。
如果大家對(duì)于開發(fā)簡(jiǎn)單的腳本解釋程序感興趣,可以看看其源碼,我感覺對(duì)于宏開發(fā)比較有幫助。
當(dāng)然,其本身作為一個(gè)工具軟件,也是有很多用途的,現(xiàn)在很多公司嘗試使用AHK來輔助進(jìn)行自動(dòng)測(cè)試腳本的開發(fā),但是由于其并不是商業(yè)軟件,很多功能并不是太理想,所以現(xiàn)在并沒有很普及,像QTP或者TestComplete作為商業(yè)軟件,在一定的時(shí)間內(nèi)還是有其優(yōu)勢(shì)的,而同時(shí)AHK本身開發(fā)出來也并不是為了自動(dòng)化測(cè)試的目的而進(jìn)行開發(fā)的。
8. lumaQQ
國(guó)產(chǎn)精品,大家鼓掌~~~
這個(gè)就不用說什么了,著名的“如來神掌”。不過作為技術(shù)人員,不能那么“淺薄”。我們對(duì)其研究,可以看到很多其他技術(shù)的閃光點(diǎn)。至少luma的查IP那幾篇文章寫得真是好啊真是好。項(xiàng)目是Java的,具體有沒有編譯過,我自己都記不清楚了,不過至少是下載過源碼,看過一些些的。
9. pymsn
這個(gè)大家大概不是很熟悉。是用Python寫的MSN客戶端程序。提到這個(gè)就有個(gè)小插曲,同時(shí)也說明俺真是個(gè)容易半途而廢的家伙,-_-||。
當(dāng)時(shí)想自己開發(fā)一個(gè)MSN的客戶端程序,不過MSN那時(shí)最新的版本已經(jīng)是live messenger了,同時(shí)已經(jīng)是使用SOAP并使用SSL進(jìn)行加密傳輸了。由于是加密傳輸,所以使用網(wǎng)絡(luò)監(jiān)聽工具來分析協(xié)議至少對(duì)于我來說是變成不可能的任務(wù)了,因?yàn)轱@示的都是密文,盡管我應(yīng)該是有公鑰可以解的,但是還是不知道如何去做。找了很多分析的工具,似乎都用不了。
那自己分析不了,就看看有沒有其他人分析的成果可以使用了。在網(wǎng)絡(luò)上搜索,發(fā)現(xiàn)最新版本的live messanger使用的MSN協(xié)議msn15似乎還沒有人有分析的文章出來,以前版本的協(xié)議是有相關(guān)的文章的,不過當(dāng)時(shí)就希望搞就搞最新的協(xié)議,不搞老版本的了。其實(shí)當(dāng)時(shí)的MSN服務(wù)器還是支持MSN8什么的的。
找來找去,不管是有名的aMSN還是啥pidgin,都沒有支持最新版的協(xié)議,這時(shí)pymsn橫空出世,在其測(cè)試branch中,出現(xiàn)了一個(gè)支持最新版本協(xié)議的。于是將其下載下來進(jìn)行了一下研究,還學(xué)習(xí)了幾個(gè)小時(shí)的Python,將其運(yùn)行起來進(jìn)行分析,結(jié)果不太幸運(yùn),卡在某個(gè)地方了(具體記不太清楚了,似乎也是在某個(gè)認(rèn)證的地方),所以項(xiàng)目就夭折了,不過pymsn這種精神還是可嘉的。大家有興趣可以看看,MSN的認(rèn)證機(jī)制也很有意思,基本已經(jīng)是分布式的了,并不是一步認(rèn)證的,而是分為好幾步,很多服務(wù)器協(xié)同來完成。
10. eclipse
最近正在學(xué)習(xí)Java,沒辦法,Java的項(xiàng)目還是比C++要多啊,用的IDE就是eclipse,不過貌似也沒有多少人用Java但是IDE不是使用eclipse的了吧,有免費(fèi)的不用干嘛呢。
盡管沒有看過eclipse的源碼(真的是沒有時(shí)間和精力,而且Java的功底也比較淺),但是藍(lán)色巨人還是品質(zhì)的保證,用重金加上良好的基礎(chǔ)(VisualAge也貢獻(xiàn)了一部分的),還有專家們的參與,這個(gè)項(xiàng)目不好也難(其實(shí)我這里說大話了,大家可以用人件或者Dream in Code來反駁我,不過sun確實(shí)被eclipse掉了,至少對(duì)于這個(gè)項(xiàng)目來說,還是挺成功的)。
對(duì)于開發(fā)Java的界面程序,eclipse就是一個(gè)寶庫(kù)。同時(shí)在設(shè)計(jì)模式等方面,其中的巧思妙想也是值得學(xué)習(xí)的。
而且也使用了插件機(jī)制(有沒有發(fā)現(xiàn)大家都走了同樣的道路呢?呵呵),僅僅使用一個(gè)微內(nèi)核來完成最核心的功能和進(jìn)行管理協(xié)調(diào),其他都是使用插件形式來完成。
當(dāng)然,這里最大的問題就是內(nèi)存,不過現(xiàn)在內(nèi)存這么便宜,而且企業(yè)都用,管他那么多呢。
以前跟著微軟走,現(xiàn)在就跟著IBM它老人家混混吧。:)
11. JDK
JDK開源大家肯定都知道了,作為要了解最深層的東西,我又要說寶庫(kù)這兩個(gè)字了。util包中的東西就夠翻了,然后再看看編譯器的實(shí)現(xiàn),JVM的實(shí)現(xiàn),哦,真是樂不思蜀了。此處是何鄉(xiāng)?夢(mèng)里不知身是客,一晌貪歡呀。。。
要了解編譯器相關(guān)的,還可以去看Python。
自己做一個(gè)語言出來,還是蠻酷的,國(guó)內(nèi)不是有個(gè)易語言嘛,大家也可以做個(gè)什么以自己命名的語言出來的。
還有一些服務(wù)器的項(xiàng)目,并沒有去測(cè)試,本身也就一臺(tái)機(jī)器,而且也裝卸了很多軟件,環(huán)境已經(jīng)很“惡劣”了,就不去搞有的沒的了。
至少apache是開源的,RED5是開源的,mysql并不清楚是否開源,至少是免費(fèi)的,還有很多開源的游戲引擎,包括2D的和3D的,以及模擬魔獸服務(wù)器的那個(gè)開源項(xiàng)目(似乎有些魔獸的私服就是用的它),好像看過一個(gè)兄弟的文章,用模板非常多,編譯一下就要幾個(gè)小時(shí),我對(duì)模板很感冒,同時(shí)機(jī)器也差,就不去湊這個(gè)熱鬧了。
對(duì)于服務(wù)器,首先,這個(gè)是高端,是潮流,不管精通了其中的哪個(gè),都是牛人,這里我沒有研究過,而且本身不做這個(gè),也就不廢話什么了,反正題目是閑話,隨便說說的。只能說,想深入網(wǎng)絡(luò)編程的,想對(duì)操作系統(tǒng)了解深入的,想了解協(xié)議是怎么實(shí)現(xiàn)的,線程池是怎么實(shí)現(xiàn)的,進(jìn)程是怎么交互的,來看看這些吧。
只要你愿意,在開源界現(xiàn)在基本能找到你需要的所有軟件的實(shí)現(xiàn),這也是我國(guó)專家說,我們的軟件實(shí)力已經(jīng)接近世界水平的底氣所在了(oh, come on...)。從上到下,從操作系統(tǒng)到應(yīng)用系統(tǒng),包羅萬象,但是,有實(shí)現(xiàn)并不代表實(shí)現(xiàn)得好,有開源的實(shí)現(xiàn)那為什么商業(yè)的產(chǎn)品還有人用,還賣得那么好呢?
不過從技術(shù)的方面來說,商業(yè)產(chǎn)品有的,開源的實(shí)現(xiàn)也有,只不過在界面,在功能的全面性上,商業(yè)化產(chǎn)品更好一些,當(dāng)然要好一些,不然大家就都用免費(fèi)的了。(其實(shí)free在這里的意思并不是免費(fèi),開源也并不全代表免費(fèi),但是一般來說,比閉源的商業(yè)產(chǎn)品要便宜或者干脆就是免費(fèi)的)
作為程序員,也就是從開源中學(xué)到一些東西吧,比如有些產(chǎn)品沒有思路,可以看看人家是怎么實(shí)現(xiàn)的。還有些開源產(chǎn)品,是人家程序員吃飽喝足,沒事做做出來的,一般這樣的程序員都是比較厲害的,可以看看這些牛人是怎么寫程序的,比如現(xiàn)在Java里面一些開源框架就給大家很多啟發(fā)。
其他的一些源碼啊什么,現(xiàn)在也記不太清楚了,比如還可以看看linux源碼啊,什么spring,struts啊,反正太多了,也就不一一列出來了,而且這些應(yīng)該網(wǎng)上是大把大把的文章,都可以找到。
最后列出兩個(gè)網(wǎng)站:
1. sourceforge 全球最大的開源項(xiàng)目站點(diǎn),不過現(xiàn)在googlecode也開始趕上來了,但是老牌的開源項(xiàng)目還是SourceForge上面比較多。
2. codeproject 這個(gè)主要是微軟的一些VC以及C#的項(xiàng)目,比較的小,但是作為參考不錯(cuò)。還有類似的網(wǎng)站codeGURU,不過常上的還是codeproject。
it知識(shí)庫(kù):亂想亂寫之閑話編譯,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。