GNU工具以及GCC對C語言程序的處理流程

GCC是一族工具的集合,包含預處理器、編譯器、匯編器、鏈接器。
對于默認的文件名,GCC可以自動選擇工具自動完成文件處理過程。
從C語言的源程序道可執行文件,實質上是依靠GCC調用一系列工具完成的。

GCC默認處理的文件

文件類型擴展名文件說明
文本文件*.cC源文件
文本文件*.cC源文件
文本文件*.cppC++源文件
文本文件*.i預處理后的C源文件
文本文件*.ii預處理后的C++源文件
文本文件*.s匯編語言
文本文件*.h頭文件
二進制文件*.o目標文件
二進制文件*.so動態庫(共享庫)
二進制文件*.a靜態庫(歸檔文件)

Binutils工具集合

Binutils是一個二進制工具集合,包含匯編、鏈接以及一系列的輔助工具。

工具名稱說明
asGNU匯編器。將處理器的匯編代碼轉換成可執行代碼,并存儲道目標文件.o文件中
ldGNU鏈接器。將一個或多個目標文件.o庫組合成一個可執行程序;或者生成靜態庫和動態庫
ar歸檔工具,可以將多個文件組合成一個大文件,并且可以讀取原始文件的內容
stripe取出文件中的符號
nm用來顯示目標文件中的符號
objectcopy轉換成二進制代碼的工具
objdump顯示目標文件的反匯編工具
readelf顯示ELF文件中的各種信息
string顯示文件中的可打印字符
ranlib產生歸檔文件的索引,并將其保存到歸檔文件中,索引同時列出歸檔文件各成員所定義的可重分配目標文件
addr2line可以將一個可執行程序的地址映射到源文件的對應行
gprof顯示程序調用段的各種數據

C語言編譯工作流程

分為4步:
1、預處理:生成.i文件
2、編譯:將預處理后的文件轉換成匯編語言,生成文件.s
3、匯編:由匯編代碼生成目標代碼,即機器代碼,生成可執行文件.o
4、鏈接:有各個文件的目標代碼生成可執行程序
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377476.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377476.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377476.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Professional C++讀書筆記05

2012-05-20 Chapter09 1、復制構造函數淺復制時的隱患 若對象中有指針成員,則當對象作為形參傳入時 例如void myFun(Spreadsheet s)…… Spreadsheet s1(5,3); myFun(s1);// s1與s中的指針成員指向同一塊內存(s是由s1通過復制構造函數生成的&#xff…

請不要對我說“你要馬上把這個小問題修改好”

“我需要”,“小問題”,“立刻”。你激怒我了。你的每個詞都激怒我了。這種情緒很難翻譯成英語表達,但在荷蘭,有些人就是用這種方式要求你。翻譯成英語,這有點像“你要幾分鐘內把這個東西修改好”。大家都知道的這樣的…

javascript 常量_JavaScript中的常量

javascript 常量JavaScript常數 (JavaScript Constants) Before ES15, the only way to declare variables using the var keyword. JavaScripts inbuilt feature of hoisting variables could be carried out using the var keyword. If youre unfamiliar with variables in J…

GDB與遠程(交叉)GDB調試

GDB提供的功能 1、啟動的程序,可以按照自定義的要求運行程序 2、可以讓被調試的程序在指定的斷點處停住(斷點可以是條件表達式) 3、當程序被停住時,可以檢查這個時候程序中發生的事 4、動態地改變程序的運行環境。 遠程(交叉)GD…

OTR-Linux控制臺打印顏色區分.

What I write, what I lost. 對于依靠打印來作debug的主要手段的, 能夠區分打印中的debug信息和error信息便顯得非常重要. 原文的介紹有一篇關于控制臺顏色的文章http://www.ibm.com/developerworks/cn/linux/l-tip-prompt/tip01/ 有定義實現各種顏色的方式. 以此為基礎, 方式挺…

c#異常處理_C#中的異常處理

c#異常處理What an exception is? 有什么例外? An exception is a runtime error; that means an abnormal situation which is created at run time and the program doesn’t execute successfully. Due to the exceptions, our program gets crash. 異常是運行…

(轉)走進AngularJs(六) 服務

原文地址:http://www.cnblogs.com/lvdabao/p/3464015.html 今天學習了一下ng的service機制,作為ng的基本知識之一,有必要做一個了解,在此做個筆記記錄一下。 一、認識服務(service) 服務這個概念其實并不陌…

Linux驅動程序框架以及概述

目錄驅動程序三種基本類型(組成)設備驅動程序功能驅動程序的內核模塊機制(開發模式)驅動程序框架三個主要部分1、字符設備驅動程序框架2、塊設備驅動程序框架2、網絡設備驅動程序框架驅動程序三種基本類型(組成&#x…

curl 使用整理(轉載)

我一向以為,curl只是一個編程用的函數庫。 最近才發現,這個命令本身,就是一個無比有用的網站開發工具,請看我整理的它的用法。 curl網站開發指南 阮一峰 整理 curl是一種命令行工具,作用是發出網絡請求,然…

Linux內核邏輯結構

linux內核從邏輯上可以分為5個部分: 1、進程調度 進程調度控制進程對CPU的訪問。當需要選擇下一個進程運行時,由調度程序選擇最值得運行的程序。可運行進程實際上是僅等待CPU資源的進程,如果某個進程在等待其他資源,則該進程是不可…

對批量文件重命名

一、 文件夾下存放各種不同名稱的同類型文件 F:\test 二、重命名格式從a0開始,數字依次遞增,a0,a1,a2,a3… import ospathr"F:\test"#要修改文件的路徑 namer"a"#命名從什么開始 num0#默認從0開始,即a0,a1,a2...... …

替換Quartus 自帶編輯器 (轉COM張)

正文 此處以Quartus II 11.1和Notepad v5.9.6.2為例。 1. 使用QII自動調用Notepad來打開HDL、sdc、txt等文件;并且可以在報錯的時候,Notepad可以直接高亮所報錯的行(此模式下,Notepad最大化后效果最佳)。 方法&#xf…

scala 方法重載_Scala中的方法重載

scala 方法重載Scala方法重載 (Scala method overloading) Method overloading is a method that is redefined in different ways under the same name. Method overloading is one of the methods used to implement polymorphism in Scala. 方法重載是一種使用相同名稱以不…

C#網頁自動登錄和提交POST信息的多種方法 新人學習中

網頁自動登錄和提交POST信息的核心就是分析網頁的源代碼(HTML),在C#中,可以用來提取網頁HTML的組件比較多,常用的用WebBrowser、WebClient、HttpWebRequest這三個。 以下就分別用這三種方法來實現:1、WebBr…

四、采集和制作數據集

一、采集數據 安裝labelme:pip install labelme 打開labelme:labelme 將收集好的照片(320320,png格式)存放到一個文件夾中,例如我的是F:\test,再此文件夾下再創建個文件夾label用于存放標簽文件 使用labelme打開數據…

MTFBWU的完整形式是什么?

MTFBWU:愿力量與您同在 (MTFBWU: May The Force Be With You) MTFBWU is an abbreviation of “May The Force Be With You". MTFBWU是“愿力量與你同在”的縮寫 。 It is an expression, which is commonly used in messaging or chatting on social media n…

VMware14.0 安裝 CentOS7.2

大致流程 對于VMware14.0安裝包用百度網盤下載即可。 鏈接:https://pan.baidu.com/s/1DEGa47EbI1Fup_MTXhv0xg 提取碼:izo6 華為云CentOS7 下載劃線的。其他步驟與大致流程里一樣。 最后輸入root 以及配置的密碼即可:密碼輸入時是沒有任何顯…

基于visual Studio2013解決C語言競賽題之1049抓牌排序

題目解決代碼及點評/* 功能:插入排序。許多玩牌的人是以這樣的方式來對他們手中的牌進行排序的:設手中原有3張牌已排好序,抓1張新牌,若這張新牌的次序在…

學習Lucene筆記一:創建索引

public class HelloLucene {/*** 建立索引* param args*/public void index(){IndexWriter writer null; try {//1.創建Directory,// Directory directory new RAMDirectory();//索引是建立在內存中的Directory directory FSDirectory.open(new File("D:/Lucene/ind…

【C++進階】C++創建文件/屏幕輸出流類(將信息同時輸出到文件和屏幕)

在軟件的調試技術中,很重要的一個技術是將軟件運行過程中的一些信息寫入到“日志文件”中。但是同時還要將信息顯示到屏幕上,以方便程序員實時查看這些信息。 最簡單的一種辦法是這樣的: std::ofstream output("debug.log", ios::…