導航:首頁 > 源碼編譯 > 編譯代做

編譯代做

發布時間:2023-11-24 15:25:28

A. 什麼是編譯程序

編譯程序指將某一種程序設計語言寫的程序翻譯成等價的另一種語言的程序的程序, 稱之為編譯程序

編譯程序也稱為編譯器,是指把用高級程序設計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。編譯程序屬於採用生成性實現途徑實現的翻譯程序。

它以高級程序設計語言書寫的源程序作為輸入,而以匯編語言或機器語言表示的目標程序作為輸出。編譯出的目標程序通常還要經歷運行階段,以便在運行程序的支持下運行,加工初始數據,算出所需的計算結果。

編譯程序的實現演算法較為復雜,這是因為它所翻譯的語句與目標語言的指令不是一一對應關系,而是一多對應關系,同時也因為它要處理遞歸調用、動態存儲分配、多種數據類型,以及語句間的緊密依賴關系。

由於高級程序設計語言書寫的程序具有易讀、易移植和表達能力強等特點,編譯程序廣泛地用於翻譯規模較大、復雜性較高、且需要高效運行的高級語言書寫的源程序。

(1)編譯代做擴展閱讀:

編譯流程分為了四個步驟:

1.預處理,生成預編譯文件(.文件)

2.編譯,生成匯編代碼(.s文件)

3.匯編,生成目標文件(.o文件)

4.鏈接,生成可執行文件

B. c/c 語言編譯程序的首要工作是

答案是A

C/C++程序編譯過程包括下面4個階段:
1.預處理,
2.編譯,
3.匯編,
4.鏈接。

下面我們就來詳細分析下這幾個階段。

1.預處理
預處理相當於根據預處理指令組裝新的C/C++程序。經過預處理,
會產生一個沒有宏定義,沒有條件編譯指令,沒有特殊符號的輸出文件,
這個文件的含義同原本的文件無異,只是內容上有所不同。

讀取C/C++源程序,對其中的偽指令(以#開頭的指令)進行處理
①將所有的「#define」刪除,並且展開所有的宏定義
②處理所有的條件編譯指令,如:「#if」、「#ifdef」、「#elif」、「#else」、「endif」等。
這些偽指令的引入使得程序員可以通過定義不同的宏來決定編譯程序對哪些代碼進行處理。
預編譯程序將根據有關的文件,將那些不必要的代碼過濾掉。
③處理「#include」預編譯指令,將被包含的文件插入到該預編譯指令的位置。
(注意:這個過程可能是遞歸進行的,也就是說被包含的文件可能還包含其他文件)
刪除所有的注釋
添加行號和文件名標識。
以便於編譯時編譯器產生調試用的行號信息及用於編譯時產生的編譯錯誤或警告時能夠顯示行號
保留所有的#pragma編譯器指令

2.編譯
將預處理完的文件進行一系列詞法分析、語法分析、語義分析及優化後,產生相應的匯編代碼文件。

3.匯編
將編譯完的匯編代碼文件翻譯成機器指令,並生成可重定位目標程序的.o文件,該文件為二進制文件,位元組編碼是機器指令。
匯編器是將匯編代碼轉變成機器可以執行的指令,每一個匯編語句幾乎都對應一條機器指令。
所以匯編器的匯編過程相對於編譯器來講比較簡單,它沒有復雜的語法,也沒有語義,也不需要做指令優化,
只是根據匯編指令和機器指令的對照表一一翻譯即可。

4.鏈接
通過鏈接器將一個個目標文件(或許還會有庫文件)鏈接在一起生成一個完整的可執行程序。
由匯編程序生成的目標文件並不能立即就被執行,其中可能還有許多沒有解決的問題。

例如,某個源文件中的函數可能引用了另一個源文件中定義的某個符號(如變數或者函數調用等);
在程序中可能調用了某個庫文件中的函數,等等。所有的這些問題,都需要經鏈接程序的處理方能得以解決。
鏈接程序的主要工作就是將有關的目標文件彼此相連接,也就是將在一個文件中引用的符號同該符號在另外
一個文件中的定義連接起來,使得所有的這些目標文件成為一個能夠被操作系統裝入執行的統一整體。
至此,大致經過這幾個步驟,一個完整的可執行程序產生了。

C. 什麼是代碼,代碼怎麼寫,怎樣寫入電腦

代碼就是程序員用開發工具所支持的語言寫出來的源文件,是一組由字元、符號或信號碼元以離散形式表示信息的明確的規則體系。代碼設計的原則包括唯一確定性、標准化和通用性、便於識別與記憶、力求短小與格式統一以及容易修改等。

簡單的說,你學會一門計算機語言然後就可以開始寫代碼了。寫代碼的過程叫做編程,編程是一項非常嚴謹的工作,一丁點錯誤都會導致你整個程序的崩潰。

寫好了代碼後,就可以用相應的編譯器寫入電腦了。編譯器能起到把源代碼編譯成能直接被計算機或虛擬機執行的目標代碼的作用。如果一切順利,經過編譯的代碼就生成了程序,就可以直接被電腦執行了。


(3)編譯代做擴展閱讀

大致說來,從人的易用性來分,電腦語言好用程度從難到易可以分為三類,一類是低級語言,如匯編語言、機器語言,一類是中級語言,如C語言,還有一類為高級語言。

一般來說,我們都是學習的高級語言。電腦語言的級別越高,越接近人類語言,但靈活性與效率也越低。

電腦本身是沒有思維能力的,它是嚴格按照人的預先設定指令工作的。這些指令都是用電腦語言按一定的語法規則寫成的。如果你寫出的程序有誤,電腦就不能正確工作。因此學習編寫電腦軟體,能培養我們的邏輯思維能力與嚴謹、周密的思維習慣。

如同任何一種語言,電腦語言也有自己的名詞,自己的基本詞彙,自己的語法結構。並且它們的語法結構大致相同。

D. 如何在windows下編譯Chrome源代碼

一,編譯之前的准備。
1) 了解代碼組織結構。
Chrome source非常龐大,並且在其主目錄下還包含有工具和組件,任何一個工具和組件也附帶有其源代碼。首先得熟悉這些源代碼的組織結構,在http://src.chromium.org/svn/中包含如下子目錄:releases,曾經發布過的chrome源代碼的正式版本;trunk,當前最新的源代碼。由於releases中的代碼比較舊,這里就不做說明了,只說明trunk的結構。在trunk下面有3個重要的目錄,deps包含了chrome編譯和運行所需要的全部組件的代碼。src裡麵包含的則是chrome的主程序的代碼,tools包含的是下載和配置編譯所需要的第三方工具的壓縮包和源代碼,其中就有svn和python這2個比較重要的工具,後面再詳細介紹。暫時做這樣一個簡單的介紹,因為其組織結構比較負責,以後再作補充斧正。

2)如何下載和同步源代碼。
首先談談下載:
1,最簡單的方法是從chrome官網上直接下載源代碼壓縮包,地址是http://build.chromium.org/buildbot/archives/chromium_tarball.html。

2,或者採用svn從http://src.chromium.org/svn/trunk/src這個地方heckout,這要求你先在本地建一個源代碼的主目錄。

3,另外一個辦法則是採用google提供的一個部署工具depot_tools。雖然這幾種辦法都可下載完整的源代碼,但目前的情況是:chrome基於Visual Stdio 2005 進行編譯,如果順利完成編譯工作,自然少不了sln文件,較早的源代碼中包含有現成的sln和vcproject文件,但後來做了修改,這些文件被拋棄掉,Google自己開發了一種腳本工具叫做GYP,這個工具採用python編寫,GYP採用了自定義的一套規則,用於生成各種工程文件。而關鍵的python則包含於depot_tools中,因此不論採用什麼方法下載的代碼,都得下載depot_tools這個工具,以獲得必須的工程文件。
depot_tools位於 http://src.chromium.org/svn/trunk/tools 下面,包括一個目錄和一個zip格式的壓縮包。

3)關於編譯器
前面提到Chrome採用Visual Stdio 2005進行編譯,根據http://dev.chromium.org的說明,需進行如下操作正常編譯
a, 安裝Visual Studio 2005.
b, 安裝Visual Studio 2005 Service Packe 1.
c, 安裝Visual Studio Hotfix 947315.
d, 如果是vista系統,還需安裝Visual Studio 2005 Service Packe 1 Update for Windows Vista.
e, 安裝Windows 2008 SDK,如果是Visual Studio 2008則不需要這一步。
f, 配置Windows 2008 SDK,使2008 SDK成為首選開發庫,以獲得一些新功能和特性。辦法是在開始->程序->Microsoft Windows SDK v6.1 > Visual Studio Registration > Windows SDK Configuration Tool,選擇make current按鈕。也可以在VS裡面手動配置include和libary路徑,效果是一樣的。

二,如何配置工程文件
1,如果是採用depot_tools,那麼從代碼下載到生成sln文件會自動完成。其步驟是
(1)下載depot_tools到本地存儲,假設位於d:/depot_tools.
(2)將d:/depot_tools添加到系統環境變數中。
(3)創建一個源代碼根目錄,假設為 d:/chrome,目錄不得包含空格。
(4)在命令行下切換當前目錄到d:/chrome。
(5)執行命令 gclient config http://src.chromium.org/svn/trunk/src ,該命令會首先下載svn和python分別到d:/depot_tools/svn_bin和d:/depot_tools/python_bin。
(6)執行命令 gclient sync 這個命令會調用svn同步源代碼。這個過程會比較漫長。全部完成之後全部源代碼就保存在d:/chrome裡面。未編譯的代碼大約有4個G左右,過程將十分漫長。這樣獲得的源代碼已經包含所有的工程文件,可直接打開。

重點說明一下gclient,它實際上是一個批處理文件,它主要做了如下一些事情,首先設置環境變數,如代碼根目錄,工具根目錄等。其次調用win_tools.bat從伺服器下載svn和python。最後調用python.exe對Chrome.gyp進行解析生成所有工程文件。
另外需要說明的是,gclient sync的過程非常漫長,根據命令行的提示來看總共需要同步67個項目(不是工程),期間可能會因為一些原因導致錯誤而退出這個過程,需要繼續調用sync。比如網路出現故障svn會多次進入sleep狀態然後重試,如果多次失敗就會報錯退出,還有的情況是某些子目錄的屬性問題無法同步,可根據提示進行操作。還有個目前新出現的問題,下面2個目錄「src/webkit/data/layout_tests/LayoutTests」和「src/third_party/WebKit/LayoutTests」的源代碼是從src.webkit.org簽出來的,但是這個網站目前存在問題無法簽出代碼, 需要屏蔽掉這2個目錄,由於裡面是測試代碼,即使丟棄也不會影響整個工程的編譯,方法是打開trunk下面的.gclient文件,向裡面添加如下內容
"custom_deps" : {
"src/webkit/data/layout_tests/LayoutTests":None,
"src/third_party/WebKit/LayoutTests":None,
},

這樣svn就能完成代碼的同步了。最後gclient會調用depot_tools/python_bin/python.exe 對 src/build/gyp_
chromium進行處理,這樣就得到了所有的sln和vcproject文件。

2,如果是下載的代碼壓縮包或者checkout的代碼,代碼目錄裡面沒有sln文件,這個時候需要調用命令行進入源代碼根目錄,然後執行命令 gclient runhooks --force,命令執行後會直接對Chrome.gyp進行解析,生成sln文件。

在實際下載過程中,最開始的時候我用TortoiseSVN從http://src.chromium.org/svn/trunk/src checkout源代碼,但是得到的代碼只有幾百兆,執行gclient runhooks --force命令後也沒有找到sln文件,具體原因未知,不建議使用此方式。而直接下載代碼壓縮包的方式沒有嘗試過,不知道是否可行。因此最穩妥的方法還是使用depot_tools來部署和處理源代碼。

三 編譯工程
啟動Visual Studio 2005打開 src/chrome/browser/chrome.sln,或者打開src/build/all.sln,如果打開的是chrome.sln裡麵包含480個工程,而all.sln則包含507個工程,一些09年的編譯說明提到有300左右的工程,可見chrome的代碼變動比較大。對整個解決方案進行編譯,打開需要2個小時才能完成編譯,視硬體環境而定,內存越大越快,推薦4G以上內存,酷睿2核或者4核。編譯完成以後據說會佔用30G的空間。編譯後的文件位於 d:/chorme/chrome/debug 目錄或者 d:/chorme/chrome/release目錄下。

四 chrome涉及的開源項目

Chrome 採用了很多開源項目,這里把它們列出來以備後用,目前Chrome涉及25個開源代碼:
1、Google Breakpad
/src/breakpad
開源的跨開台程序崩潰報告系統。
2、Google URL
/src/googleurl
Google小巧的URL解析整理庫。
3、Skia
/src/skia
矢量圖引擎。
4、Google v8
/src/v8
Google開源的javaScript引擎。V8實現了ECMA-262第三版的ECMAScript規范,可運行於Windows XP 和 Vista, Mac OS X 10.5 (Leopard), 及 Linux等基於IA-32 或 ARM 的系統之上。V8可單獨運行也可嵌入到任何C++程序中。
5、Webkit
/src/webki
開源的瀏覽器引擎
6、Netscape Portable Runtime (NSPR)
/src/base/third_party/nspr
Netscape Portable Runtime (NSPR) 提供了系統級平台無關的API及類似libc的函數。
7、Network Security Services (NSS)
/src/base/third_party/nss
Network Security Services (NSS) 一套用於支持伺服器端與客戶端安全開發的跨平台函數庫。程序通過NSS可支持SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 認證及其它一些安全標准。
8、Hunspell
/src/chrome/third_party/hunspell
Spell checker and morphological analyzer library and program designed for languages with rich morphology and complex word compounding or character encoding.
9、Windows Template Library
/src/chrome/third_party/wtl
用於開發Windows程序與UI組件的C++ library。WTL擴展了ATL (Active Template Library) 並提供一套用於controls, dialogs, frame windows, GDI objects等開發的類。
10、Google C++ Testing Framework
/src/testing/gtest
Google用於編寫C++測試的基於xUnit架構的框架,可用於多種平台上:Linux, Mac OS X, Windows, Windows CE, and Symbian。支持自動測試發現,有一套豐富的Assertions斷言,用於可自定義斷言,death tests, fatal and non-fatal failures, various options for running the tests, and XML test report generation.
11、bsdiff 與 bspatch
/src/third_party/bsdiff 及 /src/third_party/bspatch
bsdiff 與 bspatch 用於為二進制文件生成補丁。
12、bzip2
/src/third_party/bzip2
bzip2使用Burrows-Wheeler block sorting text compression 演算法與Huffman編碼壓縮文件。
13、International Components for Unicode (ICU)
/src/third_party/icu38
ICU是一套成熟並被廣泛使用的C/C++ 及 Java 庫,可為軟體提供Unicode與全球化支持。
14、libjpeg
/src/third_party/libjpeg
用於處理JPEG (JFIF)圖像格式的庫。
15、libpng
/src/third_party/libpng
PNG圖像格式庫。支持絕大部分的PNG特性,可擴展。已經被廣泛地使用了13年以上了。
16、libxml
/src/third_party/libxml
C語言的XML解析庫。
17、libxslt
/src/third_party/libxslt
C語言的XSLT庫。
18、LZMA
/src/third_party/lzma_sdk
LZMA為7-Zip軟體中7z格式壓縮所使用的壓縮演算法,有很好的壓縮效果。
19、stringencoders
/src/third_party/modp_b64
一系列高性能的c-string轉換函數,比如:base 64 encoding/decoding。通常比其標准實現快兩倍以上。
20、Netscape Plugin Application Programming Interface (NPAPI)
/src/third_party/npapi
多種瀏覽器使用的跨平台插件架構。
21、Pthreads-w32
/src/third_party/pthread
用於編寫多線程程序的API
22、SCons - a software construction tool
/src/third_party/scons
開源的軟體構建工具——下一代的編譯工具。可以認為SCons是改進過的跨平台配上autoconf/automake與ccache的Make工具的子系統。
23、sqlite
/src/third_party/sqlite
大名鼎鼎的嵌入式資料庫引擎。自管理、零配置、無需伺服器、支持事務。
24、TLS Lite
/src/third_party/tlslite
SSL 3.0, TLS 1.0, and TLS 1.1的Python免費實現庫。TLS Lite支持這些安全驗證方式:SRP, shared keys, and cryptoIDs in addition to X.509 certificates。註:Chrome並不包涵Python。TLS Lite用於Chrome開發過程中的代碼覆蓋、依賴檢查、網頁載入時間測試及生成html結果比較等。
25、zlib
/src/third_party/zlib
zlib為一套用於任意平台與機器的無損數據壓縮的庫,它免費、自由、無任何法律專利問題。

E. 編譯執行和解釋執行的區別

一、主體不同

1、編譯執行:由編譯程序將目標代碼一次性編譯成目標程序,再由機器運行目標程序。

2、解釋執行:將源語言直接作為源程序輸入,解釋執行解釋一句後就提交計算機執行一句,並不形成目標程序。

二、優勢不同

1、編譯執行:相比解釋執行編譯執行效率高,佔用資源小,適合復雜程序

2、解釋執行:開發速度快,出現嚴重BUG的幾率小。


三、缺點不同

1、編譯執行:兼容性差,例如在windows平台上寫的編譯程序一般不可以在unix平台上運行。

2、解釋執行:解析需要時間,不生成目標程序而是一句一句的執行的方式會造成計算機資源的浪費,即執行效率低。


F. 什麼是源代碼編譯

零基礎的人想要寫代碼首先需要進行一定的學習,了解一些基礎的編程知識,選擇適合自己的程序語言,之後通過不斷的學習就可以寫代碼。

從簡單的、直接的幾行十幾行程序開始,比如計算器;到復雜的小工具,比如大數計算器。這個過程中逐漸明白數組、指針、內存布局、函數,了解遞歸、棧、鏈表,然後學基本的數據結構。

C語言也好,python也好,得學會把自己的思考用程序實現。舉個例子,想制定計劃表,安排自己的時間,那這個問題就可以寫個程序來實現;想做筆記、管理自己的文件,這也是一個程序。從簡單的、直接的幾行十幾行程序開始,比如計算器;到復雜的小工具,比如大數計算器。

代碼組合

源代碼作為軟體的特殊部分,可能被包含在一個或多個文件中。一個程序不必用同一種格式的源代碼書寫。例如,一個程序如果有C語言庫的支持,那麼就可以用C語言;而另一部分為了達到比較高的運行效率,則可以用匯編語言編寫。

較為復雜的軟體,一 般需要數十種甚至上百種的源代碼的參與。為了降低種復雜度,必須引入一種可以描述各個源代碼之間聯系,並且如 何正確編譯的系統。在這樣的背景下,修訂控制系統(RCS)誕生了,並成為研發者對代碼修訂的必備工具之一。

G. C語言程序的編譯是以什麼為單位的謝謝

當然是一程序文件為單位的

H. 小白求助,編譯是什麼,為什麼需要編譯

人與機器交流(即人讓計算機按照人的意願做事)依賴於語言
語言的層次是:自然語言->高級編程語言->匯編語言->機器碼
人最熟悉的肯定是自然語言(就是你平時說的話)。
而計算機的cpu只認識二進制的機器碼,機器碼指導計算機做什麼操作(如邏輯運算)。
高級編程語言跟自然語言的關系更近些,對人來說相當於自然語言的白痴版,如java中的對象與類的概念可能對應於現實世界的某種事物,如C語言中的函數可能對應了一個功能,比如列印文件,經過簡單的訓練,人也能大概的讀懂。
匯編語言和機器碼更接近些,每個匯編指令一般都會對應一條機器碼,而高級編程語言中的一個語句(如if else什麼的)可能會對應多條匯編指令,匯編指令一般就是算術運算(如add)、邏輯運算(如and)、數據傳送(如mov)、條件判斷、跳轉等,只能用這些簡單功能的匯編指令組合來完成一個復雜的功能。人看懂匯編就很吃力了,更別提用匯編來完成想要的功能,太吃力,這個過程還是交個編譯器比較好。
而機器碼對於一般的程序員來說,就是天書,也基本沒人願意去看。
自然語言最容易表述人們的要求,當用戶用自然語言表述了需要的功能後,從自然語言到高級語言的轉換過程由程序員來完成,而由高級編程語言到匯編、由匯編到機器碼的過程都由編譯器來完成,由編譯器完成的這個過程也就是編譯了。
高級編程語言的代碼經過編譯階段成為匯編代碼,匯編代碼經過匯編階段變成機器碼,機器碼文件經過鏈接階段變成可執行文件(.exe)。一般編譯是指的編譯階段和匯編階段的組合,編譯器的工作一般是編譯和鏈接。
這就是我的理解,希望你幫到你。

I. 如何自己編譯源代碼

我們使用編譯器將自己的源代碼轉換成目標代碼, 使用鏈接器將我們的目標代碼鏈接成一個可執行程序。另外, 我們使用一些程序在計算機中輸入源代碼文本並且編輯它。這些是最初的和最重要的工具, 它們構成程序員的工具集合或「程序開發環境」。 如果你使用的是命令行窗口, 就像很多專業程序員所做的那樣, 你將不得不自己來編寫編譯和鏈接命令。如果你使用IDE(「互動式開發環境」或「集成式開發環境」), 就像很多程序員所做的那樣, 簡單地點擊正確按鈕就可以完成這個工作。附錄C介紹了如何在你的C++實現中編譯和鏈接。 IDE通常包括一個具有有用特性的編輯器, 例如用不同顏色的代碼來區分你的源代碼中的注釋、 關鍵字和其他部分, 以及其他幫助你來調試代碼、 編譯和運行代碼的功能。調試是發現程序中的錯誤和排除錯誤的活動, 你在前進的道路上會聽到很多有關它的內容。 我們使用微軟的Visual C++作?喑炭 ⒒肪呈道 H綣 頤羌虻サ廝怠氨嘁肫鰲被蚴恰癐DE」的某些部分, 那就是所指Visual C++系統。但是, 你可以使用一些提供最新的、 符合標準的C++實現的系統。我們所說的大多數內容(經過微小的修改)對所有的C++實現都將是正確的, 並且其代碼可以在任何地方運行。在工作中, 我們使用幾種不同的實現。

閱讀全文

與編譯代做相關的資料

熱點內容
android錄音開源 瀏覽:453
弗洛伊德演算法c 瀏覽:6
udp命令字 瀏覽:659
app服務端java源碼 瀏覽:798
電腦用文件夾玩大型游戲 瀏覽:254
安卓耳塞失靈怎麼辦 瀏覽:765
華三交換機保存命令 瀏覽:605
命令方塊怎麼調鍵盤 瀏覽:841
不把密碼存在伺服器上怎麼辦 瀏覽:398
怎麼讓指令方塊的命令消失 瀏覽:543
用單片機做plc 瀏覽:404
雲伺服器進入子目錄命令 瀏覽:795
伺服器機櫃如何配電 瀏覽:578
怎麼刪除iphone資源庫里的app 瀏覽:940
pdf魚 瀏覽:648
單片機pcf8591什麼作用 瀏覽:805
sql命令學院 瀏覽:283
加密軟體在電腦那個盤 瀏覽:988
android獲取外部存儲 瀏覽:573
怎麼查自己家的伺服器地址 瀏覽:858