導航:首頁 > 源碼編譯 > 編譯軟體過程

編譯軟體過程

發布時間:2022-01-27 00:17:34

『壹』 程序的編譯過程是怎樣的程序的解釋過程是怎樣的

編譯器首先用掃描程序掃描源代碼,然後用語法分析程序分析得到語法樹,然後經過語義分析、優化處理,最後通過代碼生成程序得到目標代碼的文件。
整個編譯過程就是(掃描-語法分析-語義分析-優化-目標代碼生成)。通常生成的是匯編代碼,機器代碼,可以直接執行,不需要解釋。
而解釋的過程只使用與解釋型語言,這種語言只編譯成一種中間文件,在運行時通過虛擬機讀取中間文件進行解釋運行。這種語言天生速度比較慢,但可以達到所謂的跨平台效果。
如果想深入了解,推薦看一看《編譯原理》,如果只是想大概了解,推薦看一看《編譯原理》的目錄~呵呵

『貳』 c語言怎麼用微軟的軟體編譯(過程)

DOS下面是沒有cl的,cl是Windows下命令行方式的編譯工具,IDE也是調用它編譯的。直接cl.exe /help就能看到幫助,貼給你吧 VS2010的(2012的可以交叉編譯ARM架構的目標代碼)

用於 80x86 的 Microsoft (R) 32 位 C/C++ 優化編譯器 16.00.40219.01 版
版權所有(C) Microsoft Corporation。保留所有權利。

C/C++ 編譯器選項

-優化-

/O1 最小化空間 /O2 最大化速度
/Ob<n> 內聯擴展(默認 n=0) /Od 禁用優化(默認)
/Og 啟用全局優化 /Oi[-] 啟用內部函數
/Os 優選代碼空間 /Ot 優選代碼速度
/Ox 最大化優化 /Oy[-] 啟用幀指針省略

-代碼生成-

/GF 啟用只讀字元串池 /Gm[-] 啟用最小重新生成
/Gy[-] 分隔鏈接器函數 /GS[-] 啟用安全檢查
/GR[-] 啟用 C++ RTTI /GX[-] 啟用 C++ EH (與 /EHsc 相同)
/EHs 啟用 C++ EH (沒有 SEH 異常) /EHa 啟用 C++ EH (w/ SEH 異常)
/EHc 外部「C」默認為 nothrow
/fp:<except[-]|fast|precise|strict> 選擇浮點模式:
except[-] - 在生成代碼時考慮浮點異常
fast -「fast」浮點模式;結果可預測性比較低
precise -「precise」浮點模式;結果可預測
strict -「strict」 浮點模式(意味著 /fp:except)
即使使用 /fp:except,/Qfast_transcendentals 也生成內聯內部 FP
/GL[-] 啟用鏈接時代碼生成 /GA 為 Windows 應用程序進行優化
/Ge 對所有函數強制堆棧檢查 /Gs[num] 控制堆棧檢查調用
/Gh 啟用 _penter 函數調用 /GH 啟用 _pexit 函數調用
/GT 生成纖程安全 TLS 訪問 /RTC1 啟用快速檢查(/RTCsu)
/RTCc 轉換為較小的類型檢查 /RTCs 堆棧幀運行時檢查
/RTCu 未初始化的局部用法檢查
/clr[:option] 為公共語言運行時編譯,其中 option 是:
pure - 生成只包含 IL 的輸出文件(沒有本機可執行代碼)
safe - 生成只包含 IL 的可驗證輸出文件
oldSyntax - 接受 Visual C++ 2002/2003 的託管擴展語法
initialAppDomain - 啟用 Visual C++ 2002 的初始 AppDomain 行為
noAssembly - 不產生程序集 /Gd __cdecl 調用約定
/Gr __fastcall 調用約定 /Gz __stdcall 調用約定
/GZ 啟用堆棧檢查(/RTCs) /QIfist[-] 使用 FIST 而不是 ftol()
/hotpatch 確保可熱修補映像的函數填充
/arch:<SSE|SSE2|AVX> CPU 架構的最低要求,以下選項之一:
SSE - 啟用支持 SSE 的 CPU 可用的指令
SSE2 - 啟用支持 SSE2 的 CPU 可用的指令
AVX - 支持使用 Intel(R) 高級矢量擴展指令
/Qimprecise_fwaits 僅在「try」邊界而不是「try」內部生成 FWAITs
/Qsafe_fp_loads 生成安全 FP 負載

-輸出文件-

/Fa[file] 命名程序集列表文件 /FA[scu] 配置程序集列表
/Fd[file] 命名 .PDB 文件 /Fe<file> 命名可執行文件
/Fm[file] 命名映射文件 /Fo<file> 命名對象文件
/Fp<file> 命名預編譯頭文件 /Fr[file] 命名源瀏覽器文件
/FR[file] 命名擴展 .SBR 文件 /Fi[file] 命名預處理的文件
/doc[file] 處理 XML 文檔注釋,並可選擇命名 .xdc 文件

-預處理器-

/AI<dir> 添加到程序集搜索路徑 /FU<file> 強制使用程序集/模塊
/C 不抽出注釋 /D<name>{=|#}<text> 定義宏
/E 預處理到 stdout /EP 預處理到 stdout,無行號
/P 預處理到文件 /Fx 將插入的代碼合並到文件中
/FI<file> 命名強制包含文件 /U<name> 移除預定義的宏
/u 移除所有預定義的宏 /I<dir> 添加到包含搜索路徑
/X 忽略「標准位置」

-語言-

/Zi 啟用調試信息 /Z7 啟用舊式調試信息
/Zp[n] 在 n 位元組邊界上包裝結構 /Za 禁用擴展
/Ze 啟用擴展(默認) /Zl 省略 .OBJ 中的默認庫名
/Zg 生成函數原型 /Zs 只進行語法檢查
/vd{0|1|2} 禁用/啟用 vtordisp /vm<x> 指向成員的指針類型
/Zc:arg1[,arg2] C++ 語言合規性,這里的參數可以是:
forScope[-] - 對范圍規則強制使用標准 C++
wchar_t[-] - wchar_t 是本機類型,不是 typedef
auto[-] - 對 auto 強制使用新的標准 C++ 含義
trigraphs[-] - 啟用三元祖(默認為關閉)
/ZI 啟用「編輯並繼續」調試信息 /openmp 啟用 OpenMP 2.0 語言擴展

- 雜項 -

@<file> 選項響應文件 /?, /help 列印此幫助消息
/bigobj 生成擴展的對象格式 /c 只編譯,不鏈接
/errorReport:option 將內部編譯器錯誤報告給 Microsoft
none - 不發送報告 prompt - 提示立即發送報告
queue - 在下一次管理員登錄時,提示發送報告(默認)
send - 自動發送報告 /FC 診斷中使用完整路徑名
/H<num> 最大外部名稱長度 /J 默認 char 類型是 unsigned
/MP[n] 最多使用「n」個進程進行編譯 /nologo 取消顯示版權信息
/showIncludes 顯示包含文件名 /Tc<source file> 將文件編譯為 .c
/Tp<source file> 將文件編譯為 .cpp /TC 將所有文件編譯為 .c
/TP 將所有文件編譯為 .cpp /V<string> 設置版本字元串
/w 禁用所有警告 /wd<n> 禁用警告 n
/we<n> 將警告 n 視為錯誤 /wo<n> 發出一次警告 n
/w<l><n> 為 n 設置警告等級 1-4 /W<n> 設置警告等級(默認 n=1)
/Wall 啟用所有警告 /WL 啟用單行診斷
/WX 將警告視為錯誤 /Yc[file] 創建 .PCH 文件
/Yd 將調試信息放在每個 .OBJ 中 /Yl[sym] 為調試庫插入 .PCH 引用
/Yu[file] 使用 .PCH 文件 /Y- 禁用所有 PCH 選項
/Zm<n> 最大內存分配(默認為 %) /Wp64 啟用 64 位埠定位警告

-鏈接-

/LD 創建 .DLL /LDd 創建 .DLL 調試庫
/LN 創建 .netmole /F<num> 設置堆棧大小
/link [鏈接器選項和庫] /MD 與 MSVCRT.LIB 鏈接
/MT 與 LIBCMT.LIB 鏈接 /MDd 與 MSVCRTD.LIB 調試庫鏈接
/MTd 與 LIBCMTD.LIB 調試庫鏈接

-代碼分析-

/analyze[:WX-] 啟用代碼分析
WX- - 即使調用了 /WX,也不應將代碼分析警告視為錯誤

『叄』 C語言源程序的編譯過程包括哪三個階段

編譯:將源程序轉換為擴展名為.obj的二進制代碼
連接:將obj文件進行連接,加入庫函數等生成可執行文件
運行:執行可執行文件,有錯返回修改,無錯結束

『肆』 什麼是編譯程序

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

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

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

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

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

(4)編譯軟體過程擴展閱讀:

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

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

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

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

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

『伍』 什麼是編譯程序 編譯程序的工作過程

編譯程序是變成語言在計算機上面運行的一種方式。
比如你現在編寫(編譯型語言)了你個程序文件並要運行它,但是計算機是不認識這個文件裡面的東西的(其實計算機只認識0和1這樣的數字),所以這里就需要把你自己寫的程序文件翻譯一遍,翻譯過後並生成一個計算機能夠識別的文件,把你原來的源文件翻譯成計算機能夠識別的文件的過程就叫編譯,其實計算機運行的真正文件是編譯過後的編譯文件。

『陸』 一個軟體從源代碼到可執行程序,需要經歷幾個步驟的

一般經過編譯程序編譯後就可以直接執行了。
編譯程序一般有兩種執行方式:一種是邊解釋邊執行,一次將一條指令通過編譯程序編譯成機器代碼後執行,然後再編譯下一條指令,此種方式必須通過編譯程序來協助完成;另外一種是通過編譯程序直接將程序源代碼直接編輯成可執行文件,可執行文件可獨立執行,用不著編譯程序了。

『柒』 簡述編譯程序的工作過程

1識別出句子中的一個個單詞
2分析句子的語法結構
3根據句子的含義進行初步翻譯
4對譯文進行修飾
5寫出最後的譯文

『捌』 編譯程序的工作過程

編譯程序必須分析源程序,然後綜合成目標程序。首先,檢查源程序的正確性,並把它分解成若干基本成分;其次,再根據這些基本成分建立相應等價的目標程序部分。為了完成這些工作,編譯程序要在分析階段建立一些表格,改造源程序為中間語言形式,以便在分析和綜合時易於引用和加工(圖1)。
數據結構分析和綜合時所用的主要數據結構,包括符號表、常數表和中間語言程序。符號表由源程序中所用的標識符連同它們的屬性組成,其中屬性包括種類(如變數、數組、結構、函數、過程等)、類型(如整型、實型、字元串、復型、標號等),以及目標程序所需的其他信息。常數表由源程序中用的常數組成,其中包括常數的機內表示,以及分配給它們的目標程序地址。中間語言程序是將源程序翻譯為目標程序前引入的一種中間形式的程序,其表示形式的選擇取決於編譯程序以後如何使用和加工它。常用的中間語言形式有波蘭表示、三元組、四元組以及間接三元組等。
分析部分源程序的分析是經過詞法分析、語法分析和語義分析三個步驟實現的。詞法分析由詞法分析程序(又稱為掃描程序)完成,其任務是識別單詞(即標識符、常數、保留字,以及各種運算符、標點符號等)、造符號表和常數表,以及將源程序換碼為編譯程序易於分析和加工的內部形式。語法分析程序是編譯程序的核心部分,其主要任務是根據語言的語法規則,檢查源程序是否合乎語法。如不合乎語法,則輸出語法出錯信息;如合乎語法,則分解源程序的語法結構,構造中間語言形式的內部程序。語法分析的目的是掌握單詞是怎樣組成語句的,以及語句又是如何組成程序的。語義分析程序是進一步檢查合法程序結構的語義正確性,其目的是保證標識符和常數的正確使用,把必要的信息收集和保存到符號表或中間語言程序中,並進行相應的語義處理。

『玖』 高級語言的編譯過程,經過哪幾個步驟

1
.此法分析器!2
。語法分析器
3
語義分析器
4中間代碼生成
5.代碼優化器
6.代碼生成器
7。目標程序
再看看別人怎麼說的。

『拾』 程序寫好後怎麼編譯

把配置管理器選擇為Release,然後選擇菜單--生成--生成xxx(或者直接點擊綠色小箭頭運行下)就已經生成exe程序了,在bin/release文件夾下。讓你選擇release是把程序編譯成發布版,vs會自動優化代碼。如果是debug則不會。

閱讀全文

與編譯軟體過程相關的資料

熱點內容
myeclipse命令行 瀏覽:126
小謝解壓 瀏覽:139
h264編碼器源碼 瀏覽:664
有什麼辦法翻錄加密視頻 瀏覽:666
java數據結構與演算法面試題 瀏覽:977
解壓不了是什麼意思 瀏覽:359
紐西蘭編程師年薪 瀏覽:321
程序員為什麼大多生閨女 瀏覽:51
c編程用英文還是中文 瀏覽:723
一點都不解壓的游戲 瀏覽:203
解壓為什麼不能用中文文件夾 瀏覽:615
伺服器如何解除備份 瀏覽:144
安卓手機為什麼用一年就變卡 瀏覽:11
如何用風變編程自動回復 瀏覽:512
安卓閱讀幣怎麼樣 瀏覽:437
京東app怎麼切號 瀏覽:583
進入傳奇伺服器後如何修改 瀏覽:42
m0單片機的cycle怎麼知道 瀏覽:806
linux命令太長 瀏覽:782
壓縮機nb1111y是多少w 瀏覽:45