版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、GNU編譯工具鏈使用簡介,張吉豫 2005-03-12,2,內(nèi)容,GNU編譯工具鏈的基本組成與工作流程 工具鏈的常用工具和選項 Unicore工具鏈與交叉編譯,3,編譯工具鏈的基本工作流程,一個“hello world”程序的演變歷程,4,GNU工具鏈的組成,GCCGNU Compiler Collection BinutilsGNU binary utilities GlibcGNU C Library 軟件開發(fā)的基本工具集合,5,GCC,功能: 高級語言(.c、.cpp、.F)匯編語言(.s) 用戶界面,驅動各工具的執(zhí)行 組成:一組可執(zhí)行程序 + 一組庫 cpp、gcc、g+、g77 cp
2、p0、cc1、cc1plus、f771 libgcc.a、crtbegin.o、crtend.o 支持多種語言和目標機,6,Binutils,功能: 匯編語言(.s)目標文件可執(zhí)行程序 查看二進制文件信息 組成:一組可執(zhí)行程序 as、ld objdump、readelf、ar 支持多種目標機,7,Glibc,功能: 提供語言和操作系統(tǒng)的標準庫函數(shù) 組成:若干可執(zhí)行程序 + 大量庫 ldd、iconv、locale ISO C、POSIX、UNIX、GNU 絕大部分與目標機無關,8,GNU工具鏈的工作流程,擴展名的默認含義 需要預處理的源代碼:.c、.cc、.F 不需預處理的源代碼:.i、.ii
3、、.f 需要預處理的匯編代碼:.S 不需預處理的匯編代碼:.s 目標文件:.o 靜態(tài)庫:.a 動態(tài)庫:.so,9,cpp0 ,cc1、cc1plus、f771 ,as,ld、ar,.i、.ii、.f,.s,.o,libgcc.a ,可執(zhí)行程序或庫,glibc,gcc g+ g77 ,.i、.ii、.f,.c、.cc、.F,.s,.o,.c、.cc、.F .i、.ii、.f .s、.o,10,常用工具和選項,編譯: gcc/g+/g77 匯編和連接: as、ld 二進制工具: objdump、readelf、strip、ar、nm、ldd gprof、gcov,11,幫助選項,-help -ta
4、rget-help 顯示與目標機有關的幫助信息,比如目標機的一些特殊選項,12,編譯(1),gcc/g+/g77 options file. -Wall 打印警告信息 -g 添加調(diào)試信息到輸出文件 -O -O0 -O1 -O2 -O3 -Os 優(yōu)化選項,若有多個則最后一個有效 -D -U 定義和取消宏定義 -msoft-float 使用軟件庫(libgcc.a)模擬硬件浮點指令,13,編譯(2),-I 指定頭文件搜索路徑,若有多個則從前往后搜索 -L 指定庫搜索路徑,若有多個則從前往后搜索 -l 指定引用的庫,從當前位置向后搜索 -static -shared 使用靜態(tài)連接或動態(tài)連接 -pg
5、-fprofile-arcs -ftest-coverage 添加額外的統(tǒng)計代碼用于profile,與gprof和gcov配合使用,14,編譯(3),-E 輸出預處理后的文件(.i、.ii、.f 等) -S 輸出編譯生成的匯編文件(.s) -c 輸出匯編生成的目標文件(.o) -o 指定輸出文件名 -v 輸出編譯過程的詳細信息,包括編譯過程中以哪些參數(shù)調(diào)用了哪些程序。,15,編譯(4),基于profiling的優(yōu)化編譯 根據(jù)程序執(zhí)行反饋的信息指導編譯優(yōu)化以產(chǎn)生出更好的代碼。 使用方法 編譯:添加-fprofile-arcs選項和其他優(yōu)化選項進行編譯,生成可執(zhí)行程序 執(zhí)行:執(zhí)行程序,對每個源程序
6、sourcefile生成sourcefile.da,其中保存了統(tǒng)計信息 重新編譯:添加-fbranch-probabilities選項和其他相同的優(yōu)化選項重新編譯,生成質量更高的代碼,16,匯編和連接,as option. asmfile. 匯編器,可由gcc -c代替 ld options file. 連接器,可由gcc代替 通常由gcc調(diào)用,一般不直接使用,17,二進制工具,objdump readelf strip ar nm ldd gprof gcov,18,ELF可重定位目標文件示例,sections,19,二進制工具(1),objdump option(s) file(s) 反匯
7、編各種格式的目標文件和可執(zhí)行程序 常用選項: -d 只反匯編代碼段 -D 反匯編代碼段和數(shù)據(jù)段 -S 混合輸出源代碼和匯編代碼,編譯時必須加-g選項,20,二進制工具(2),readelf option(s) elf-file(s) 顯示ELF格式文件信息 常用選項: -e 顯示頭信息,包括ELF file header、section header、program header -s 顯示符號表信息 -r 顯示重定位信息 -a 顯示所有信息,21,二進制工具(3),strip option(s) in-file(s) 刪除輸入文件的符號表和指定的section 常用選項: -o 指定輸出文件
8、名,22,二進制工具(4),ar 管理歸檔文件(*.a) 常用命令: d m q r t x 分別用于刪除、移動、添加、替換、顯示、取出歸檔文件的內(nèi)容 舉例 ar x /usr/lib/libc.a 取出libc.a中的所有目標文件(*.o)到當前目錄 ar q libmy.a obj1.o obj2.o 將obj1.o和obj2.o加入到libmy.a中,23,二進制工具(5),nm option(s) file(s) 顯示文件的符號信息,可用于各種目標文件、可執(zhí)行程序和歸檔文件(.a) 舉例 nm /usr/lib/libc.a symbol, printf.o: 00000000 T _
9、IO_printf 00000000 T printf U stdout U vfprintf ,24,二進制工具(6),ldd OPTION. FILE. 輸出動態(tài)連接程序的共享庫依賴關系 舉例,njtAquarius temp$ ldd /bin/ls libtermcap.so.2 = /lib/libtermcap.so.2 (0 x40028000) libacl.so.1 = /lib/libacl.so.1 (0 x4002d000) libc.so.6 = /lib/i686/libc.so.6 (0 x42000000) libattr.so.1 = /lib/libattr
10、.so.1 (0 x40033000) /lib/ld-linux.so.2 = /lib/ld-linux.so.2 (0 x40000000) njtAquarius temp$,25,二進制工具(7),gprof 根據(jù)程序執(zhí)行產(chǎn)生的數(shù)據(jù)(gmon.out)輸出profile信息,包括每個函數(shù)執(zhí)行時間、所占比例、調(diào)用關系等。 可用于分析程序的關鍵代碼,指導程序員進行優(yōu)化 使用方法 編譯:加-pg選項 執(zhí)行:產(chǎn)生gmon.out(二進制數(shù)據(jù)) 顯示:gprof program_name output,26,二進制工具(8),gcov 另一個profiling工具,可以分析程序一次執(zhí)行過程中每
11、行源代碼的執(zhí)行數(shù)量、branch跳轉情況等。 可用于分析程序的關鍵代碼和構造testsuite 源代碼在gcc的包中,不屬于binutils 使用方法 編譯:加-fprofile-arcs -ftest-coverage選項,最好不加優(yōu)化選項 執(zhí)行:針對每個sourcefile產(chǎn)生sourcefile.bb、sourcefile.bbg、sourcefile.da(二進制數(shù)據(jù)) 顯示:gcov sourcefile.c 生成sourcefile.gcov,27,Unicore工具鏈,移植GNU工具鏈到unicore系統(tǒng) 兩套版本 uc1 gcc-2.95.3 + glibc-2.1.3 + binutils-2.10.1 uc2 gcc-3.2.1 + glibc-2.3.1 + binutils-2.13.2,28,Unicore工具鏈,使用方法 本地: 與在x86上的本地工具鏈幾乎沒有什么區(qū)別 交叉編譯: 命令前都加上前綴unicore32-linux-, 如unicor
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 移動式公共衛(wèi)生間安裝施工方案
- 生動場景描寫寫作技巧突破
- 幼兒園德育主題活動設計與反思
- 大學生就業(yè)指導與職業(yè)規(guī)劃講座稿
- 初中英語聽力訓練專項試卷
- 車間人員調(diào)配與績效管理方案
- 高校教學督導工作考核標準
- 河道治理生態(tài)修復專項施工組織設計
- 小學英語三年級公開課教學設計
- 1.2 男生女生 同步課件-2025-2026學年統(tǒng)編版道德與法治七年級下冊
- 冷渣機調(diào)整課件
- 肺癌全程護理計劃
- 學堂在線 雨課堂 學堂云 人工智能 章節(jié)測試答案
- 工業(yè)高質量數(shù)據(jù)集研究報告
- 2024城口縣國企招聘考試真題及答案
- 淋巴的生成和回流
- 冬季幼兒園暖氣安全培訓課件
- 血管外科護理進修課件
- 張力電子圍欄施工方案
- 建筑施工圖設計方案
- 2025年GMAT邏輯推理能力強化模擬試卷解析
評論
0/150
提交評論