當前位置:首頁 » 操作系統 » 大街網源碼

大街網源碼

發布時間: 2025-03-02 03:51:05

A. 透過源碼領悟GCC到底在幹些什麼 GCC源碼分析

上半年一直在做有關GCC和LD的項目,到現在還沒做完。最近幾天編程的那台電腦壞了,所以趁此間隙寫一點相關的分析和經驗之類的跟大家共享。
一、GCC的作用和運行機制
GCC是Linux下重要的編譯工具,用法這里就不說了,滿大街都找得到。這里我重點介紹GCC的運作機制,作為代碼分析的鋪墊。全篇使用C語言子部件來作分析,因為我對其他語言的編譯沒有研究。
根據編譯原理,語言的編譯分為這么幾個步驟:詞法分析、語法分析、語義分析、中間語言生成、優化、目標代碼生成等。然而從編譯器使用的角度來看,要把源代碼翻譯為可執行文件要經過編譯和連接兩步,與此對應,一塌帆個完整的編譯系統一定包含編譯器和連接器兩大功能部件。編譯器要完成編譯原悶塵理中提到的那些任務;連接器要把編譯器生成的代碼片段拼接成一個完整的可執行程序。之所以需要連接器,是因為一般的程序都是多源文件的,而編譯器一次只編譯一個源文件(稱之為翻譯單元translation unit),因此需要連接器把所有翻譯單元對應的輸出合並成一個可執行文件。
如果一切順利,可執行程序就可以正確的生成出來。但是一旦源代碼存在某些問題,錯誤就會被報告出來。編譯器報告的錯誤一般都是局部錯誤,它會指明錯誤在哪個文件第幾行;連接器報告的錯誤一般都是全局錯誤,而且絕大多數都是多胳膊少腿的問題,比如函數重定義,無法解決的外部符號等,這些錯誤無法定位到某一行。
GCC就是這里的編譯器。准確來說,GCC是一個編譯驅動器,驅動cc1、as和ld三個部件完成編譯、匯編和連接的工作。cc1將C語言源文件編譯為匯編文件(.s)。而將匯編代碼轉換為二進制指令的工作由AS完成,生成大家都很熟悉的對象文件(.o);生成的這些對象文件再由AR程序打包成靜態庫(.a),或者由LD程序連接成可執行程序(elf、.so或其他格式)。而LD就是所謂的連接器。AS、AR、LD是屬於另外一個叫做binutils的軟體包的程序,所以要讓GCC能夠有效運作起來,除了在系統中安裝GCC外,還要安裝binutils才行。
以下是cc1、as、ld各司其責的配合完成一個編譯過程。

[plain] view plain
gcc test.c -S -o test.S
as test.S -o test.o
ld test.o -o test
通常所用的「gcc -c」就相當於「gcc -S」 + as,而對於編譯單個源文件一步到位生成可執行「gcc test.c -o test」相當於上面三個步驟的組合,中間文件被放置在臨時目錄下。從這一點看來,GCC除去編譯的功能外,更像是個driver,它可以驅動as和ld完成整個的編譯,特別是gcc也接受對象文件(.o)和靜態庫(.a)作為參數用於生成可執行程序,其實背後就是調用的LD,還可以用「-Wl,」選項給LD傳遞自定義參數。所以在大多數軟體的Makefile里,你很難找到AS和LD的字眼,gcc已經給你包辦了。
GCC源代碼里包含的主要就是cc1這部分(還包括一些其他的輔助工具,比如collect2等)。

二、GCC的安裝
要學習和修改GCC源碼,首先第一步是在自己的機器上用GCC源代碼編譯出一個選定版本的GCC(這里以gcc-4.5.2.tar.bz2為例,源碼可以從http://gcc.gnu.org去下載)。除此之外,GCC依賴於gmp、mpfr、mpc三個庫,如果你機器上沒有,或者版本太團罩雹老以至於無法支持新的GCC,那麼你還得去把這三個庫下載下來。
一般來說,下載GCC是從GNU的FTP鏡像網站去下載,gcc的代碼包一般放置在/release/gcc-x.y目錄下,而那三個依賴庫一般放置在/infrastructure/目錄下。
1、把依賴庫和GCC解包

[plain] view plain
tar -vjxf gmp-4.3.2.tar.bz2 -C /usr/src/
tar -vjxf mpfr-2.4.2.tar.bz2 -C /usr/src/
tar -vxf mpc-0.8.1.tar.gz -C /usr/src/
tar -vjxf gcc-4.5.2.tar.bz2 -C /usr/src/

2、到自己的home目錄下編譯依賴庫

[plain] view plain
cd ~
mkdir gmp-build
cd gmp-build
/usr/src/gmp-4.3.2/configure --prefix=/usr/local/gmp-4.3.2 #指定安裝位置
make
make check
make install

cd ~
mkdir mpfr-build
cd mpfr-build
/usr/src/mpfr-2.4.2/configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2
make
make check
make install


cd ~
mkdir mpc-build
cd mpfr-build
/usr/src/mpc-0.8.1/configure --prefix=/usr/local/mpc-0.8.1 --with-mpfr=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2
make
make check
make install

3、編譯GCC

[plain] view plain
cd ~
mkdir gcc-build
cd gcc-build
/usr/src/gcc-4.5.2/configure --prefix=/usr/local/gcc-4.5.2 --with-mpc=/usr/local/mpc-0.8.1 --with-mpfr=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2 --enable-languages=c,c++
make
make install

B. 開放源代碼軟體的主要種類

Shareware
共享軟體。允許他人自由拷貝並收取合理注冊費用。使用者可在軟體規定的試用期限內免費試用,再決定注冊購買與否。大部分共享版軟體都有功能和時間限制,試用期通常分為7天、21天、30天不等。而有的共享軟體還限制用戶只能安裝一次,若刪除後重新安裝將會失效。像Winzip、ACDSee等軟體就是共享軟體。
Demos/"Crippleware"
免費或低費用試用的軟體,是商業軟體的一部分,它沒有自由可用的源碼,沒有支持,通常缺乏關鍵特徵。
Bundled Software
它由商業軟體攜帶並且不用增加額外的費用,但是它一般具有很有限的使用許可,沒有自由可用的源碼。例如:Microsoft Internet Explore. "Consortium-Ware": 源碼由公司內部人員共享,但是對公眾沒有自由可用的源碼。例如:Motif. "Non-commercial use only": 這是可以免費從Internet網下載的典型軟體,甚至連同源碼,但是同時它有嚴格的許可證限制它的使用。例如:1998年以前的Netscape的瀏覽器一些Open-source許可證類型
BSD(Berkeley Source Distribution)許可證:它要求版權和著者身份申明
GPL
通用公共許可證("CopyLeft")禁止派生或分發產品的限制。
LGPL
庫通用許可證,它不同於GPL許可證,在這個許可證下,庫(函數庫)可以自由的聯接到私有軟體。
Artistic License
使作者保持對進一步開發的控制。
NPL(Netscape Public Lincense)
基於GPL精神的新的許可證,但是保持了對源碼更多的控制和所有權(請看下面的「Netscape發展什麼」這一節)
Public Domain/Not Copyrighted/No Restrictions: 通常用於決定性的演算法以鼓勵廣泛使用,通常由美國政府使用。
Open-source 軟體的一些例子
現在有幾百種成熟的open-source產品被廣泛使用。這而是一些最著名的:
Corncart
由OSIC信息技術有限公司最新開發的開源電子軟體,集合之前所有電子開源軟體的所有優點。目前尚處於二次開發階段。
BSD UNⅨ
由California大學Berkeley分校開發的基於"BSD"許可證的軟體。許多UNⅨ商業版本是直接基於BSD源碼或者大多從它的設計中借用來的。
Linux: 它從一個芬蘭的大學生的研究項目成長為近六年最流行的非Microsoft操作系統。最初它僅僅是為PCs機設計的,可現在它支持Palm Pilots(小型掌中平台),大型的64位Digital Alphas晶元的超級計算機,和在這兩者之間的幾乎任何事物。與傳統操作系統相比它的效率更高,更可靠,更先進。它包括編譯程序,庫,和來自於FreeSoftware Foundation的各種工具,還有成千上萬的open-source產品,Linux平台是一個小的但是卻在快速成長的商業產業的基礎,還是軟體革新的溫床。它由商業公司和散布在全世界的自由編程人員基於GPL所開發。
Perl語言
"Internet的傳輸帶」,大多數web伺服器的動態內容的基礎,廣泛用於腳本語言編程和自動化文檔處理。它由Perl研究所基於Artistic 許可協議開發。
GCC
GNU C編譯器是許多Unix平台上首選的C/C++編譯器,也可以在其他平台上運行;因為支持幾乎每種處理器,所以它也被作為一個跨平台的工具而廣為流行;它由FSF基於GPL維護、開發。
X Window 系統
使用最廣的非microsoft窗口系統,具有先進的跨平台遠程執行特性,性能優良,靈活度高;由MIT和X Consortium在類BSD許可協議下開發;其他的增強功能由The XFree86 Project公司開發。
Internet 主幹:
BIND: Berkeley Internet Name Daemon; 為幾乎所有的Internet域名解析伺服器使用,其行為如同一個分散全球的分布式資料庫;由ISC(Internet Software Consortium)維護。
BSD SendMail: 郵件傳輸代理的最高標准。沒有任何一家商業競爭者能和它匹敵,絕對安全、健壯;負責處理Internet上超過75%的郵件傳輸任務,包括象AOL這樣的巨型站點---每天有數百萬的消息。由SendMail公司基於BSD許可協議維護。
INN:InterNet新聞伺服器,操縱Internet上的決大多數Usenet新聞還包括許多企業網。被ISC(BSD)所維護(BSD許可協議)。
Apache: 超過半數的web伺服器的動力(遠遠超出Microsoft和Netscape加起來的數量),早在1998年用於超過百萬的web伺服器。由Apache組織開發(類BSD許可證維護)。
WU-FTPD: 在Internet網上最流行的FTP伺服器,幾乎使用於所有的FTP站點。最初是由Bryan O'Connor在Washington大學Louis大街開發的,現在被Academ Consulting Services和許多自願者維護(BSD許可)。

C. 現在的IT行業特別是培訓機構都有些什麼套路

IT行業的高薪就業前景引發越來越多的人想要轉行到這個領域,部分培訓機構為搶奪生源可謂是無所不用其極,市場競爭催生了很多不正當競爭手段,虛假宣傳成了很多機構的標配,霸哥在網路上看到過很多學員在IT培訓機構受騙的案例,接下來整理分享給大家,給同學們敲個警鍾。

1、真的「招聘」?

這是很多培訓機構都會用到的招生手段之一,在各大招聘網站上發出IT相關崗位招聘信息,或是打電話邀約面試,最終去了之後機構的老師以「面試官」的身份對學員進行技術拷問,不斷貶低學員的知識水平、貶低學員的職業規劃、攻破學員的心理防線,讓學生懷疑自己的個人能力。在學員心灰意冷的時候,「面試官」開始吹捧培訓學習的重要性與好處,動搖學生的念頭。讓學員彷彿抓住了救命稻草一般心甘情願參加培訓,機構的目的也就達到了。

在網站上隨便搜一下,就會找到很多這樣的招聘內容,比如:

所以各位同學在師資考察這塊一定要看到能夠證明師資的資料才可以,否則一切都是亂扯!

5、就業真的「保險」?

就業保險是從2017年下半年才出現的套路,指的是學員除學費外還要再單獨交200元的保險費,學員在培訓結束後,由機構推薦就業,如果在1—2個月未能就業,學校將免費提供課程,讓學員再次免費學習,二次學習後,學員仍沒有找到工作的,保險公司將按比例或全額賠付學費,表面上看學員的風險基本為零,其實這只是培訓機構宣傳的噱頭。

理由很簡單,培訓機構給你推薦具體一份工作,只要和IT相關,工作內容和薪資即便再和你期望不符,培訓機構已經按合同完成了培訓和推薦責任,保險的責任也就相應結束了。不管你後來是被辭還是自辭,保險公司都不會再賠你錢了,這點套路大家一定要搞清楚。

所以對於就業保險這件事,只是培訓機構為了招生而使用的手段之一,大家一定要有自己的判斷。

D. 如何查看大型工程的源代碼

程序員在工作過程中,會遇到很多需要閱讀源碼的場景,比如技術預研、選擇技術框架、接手以前的項目、review他人的代碼、維護老產品等等。可以說,閱讀源代碼是程序員的基本功,這項基本功是否扎實,會在很大程度上影響一個程序員在技術上的成長速度。2014年寫《Qt on Android核心編程》和《Qt Quick核心編程》時,很多內容都是通過分析Qt源碼搞明白的。這陣子研究CEF和PPAPI,也主要靠研究源代碼來搞明白用法。最近工作上要修改已有項目的一個子系統,也是得硬著頭皮先讀懂代碼。總之在開發工作這十來年中,讀過太多源碼了,從源代碼中學習到太多東西了,如果不閱讀源代碼,真不知道自己能否成長起來。寫代碼是從模仿開始的,提高也是從觀摩別人的優秀設計和代碼開始的。所以閱讀源碼至關重要,接下來咱從下列方面聊聊閱讀源碼的事兒。不同的目的會有不同的心情,會影響到工作的進展,像修復他人的Bug這種事情,類似於沒被掰彎的男猿捏著鼻子給另外一個男人擦屁股,是很惡心的,很容易讓人拒絕的。所以因這種目標而閱讀源碼,往往是欲拒還迎、欲說還休,效率較低。然而修復實際工作中幫別人修復Bug這種情形,十有八九你要遇到,無可逃避。所以,心理調試很重要。為了學習去讀源碼,這是最愉快的最放鬆的。不過提醒一點,設定可檢驗的目標才會有收獲,否則就會像走到大街上看見一美女擦肩而過那樣,驚艷一下下,過後嘛關系嘛收獲也沒了。其他的目的,重構舊代碼、添加新功能,比幫別人擦溝子(陝西話,屁股)略強,因為他帶有創造性,創造性的活動能給人帶來強烈的愉悅,所以雖然這兩種目的也有很多讓人不爽的部分,不過想到我可以讓一棵老樹煥發青春,不爽也就慢慢弱下去了。

熱點內容
網頁編程保存 發布:2025-03-03 06:04:51 瀏覽:433
單片機程序反編譯 發布:2025-03-03 06:04:49 瀏覽:700
為什麼fgo需要50安卓系統 發布:2025-03-03 06:04:49 瀏覽:51
編譯添加文件 發布:2025-03-03 06:04:14 瀏覽:727
傳祺suv有哪些配置 發布:2025-03-03 05:59:18 瀏覽:26
樂看源碼 發布:2025-03-03 05:57:54 瀏覽:806
編程反向 發布:2025-03-03 05:39:19 瀏覽:797
imac買什麼配置打游戲 發布:2025-03-03 05:26:45 瀏覽:874
選擇存儲器需要考慮最重要的參數 發布:2025-03-03 05:05:25 瀏覽:365
flushjava 發布:2025-03-03 04:27:01 瀏覽:932