张吉豫 zhangjiyu@mprc.pku.edu.cn 2005-03-12 GNU编译工具链使用简介 张吉豫 zhangjiyu@mprc.pku.edu.cn 2005-03-12.

Slides:



Advertisements
Similar presentations
四川财经职业学院会计一系会计综合实训 目录 情境 1.1 企业认知 情境 1.3 日常经济业务核算 情境 1.4 产品成本核算 情境 1.5 编制报表前准备工作 情境 1.6 期末会计报表的编制 情境 1.2 建账.
Advertisements

主编:邓萌 【点按任意键进入】 【第六单元】 教育口语. 幼儿教师教育口 语概论 模块一 幼儿教师教育口语 分类训练 模块二 适应不同对象的教 育口语 模块三 《幼儿教师口语》编写组.
第一組 加減法 思澄、博軒、暐翔、寒菱. 大綱 1. 加減法本質 2. 迷思概念 3. 一 ~ 七冊分析 4. 教材特色.
海南医学院附 院妇产科教室 华少平 妊娠合并心脏病  概述  妊娠、分娩对心脏病的影响  心脏病对妊娠、分娩的影响  妊娠合病心脏病的种类  妊娠合并心脏病对胎儿的影响  诊断  防治.
植树节的由来 植树节的意义 各国的植树节 纪念中山先生 植树节的由来 历史发展到今天, “ 植树造林,绿化祖国 ” 的热潮漫卷 了中华大地。从沿海到内地,从城市到乡村,涌现了多少 造林模范,留下了多少感人的故事。婴儿出世,父母栽一 棵小白怕,盼望孩子和小树一样浴光吮露,茁壮成长;男 女成婚,新人双双植一株嫩柳,象征家庭美满,幸福久长;
客户协议书 填写样本和说明 河南省郑州市金水路 299 号浦发国际金融中 心 13 层 吉林钰鸿国创贵金属经营有 限公司.
护理学基础 第七章 医院与住院环境.
浙江省县级公立医院改革与剖析 马 进 上海交通大学公共卫生学院
第二章 环境.
教师招聘考试 政策解读 讲师:卢建鹏
了解语文课程的基本理念,把握语文素养的构成要素。 把握语文教育的特点,特别是开放而有活力的语文课程的特点。
北台小学 构建和谐师生关系 做幸福教师 2012—2013上职工大会.
福榮街官立小學 我家孩子上小一.
第2期技職教育再造方案(草案) 教育部 101年12月12日 1 1.
企业员工心态管理培训 企业员工心态管理培训讲师:谭小琥.
历史人物的研究 ----曾国藩 组员: 乔立蓉 杜曜芳 杨慧 组长:马学思 杜志丹 史敦慧 王晶.
教育部高职高专英语类专业教学指导委员会 刘黛琳 山东 • 二○一一年八月
淡雅诗韵 七(12)班 第二组 蔡聿桐.
第七届全国英语专业院长/系主任高级论坛 汇报材料
小數怕長計, 高糖飲品要節制 瑪麗醫院營養師 張桂嫦.
制冷和空调设备运用与维修专业 全日制2+1中等职业技术专业.
会计信息分析与运用 —浙江古越龙山酒股份有限公司财务分析 组员:2006级工商企业管理专业 金国芳 叶乐慧 魏观红 徐挺挺 虞琴琴.
第六章 人体生命活动的调节 人体对外界环境的感知.
芹菜 英语051班 9号 黄秋迎 概论:芹菜是常用蔬菜之一,既可热炒,又能凉拌,深受人们喜爱。近年来诸多研究表明,这是一种具有很好药用价值的植物。 别名:旱芹、样芹菜、药芹、香芹、蒲芹 。 芹菜属于花,芽及茎类。
2012年 学生党支部书记工作交流 大连理工大学 建工学部 孟秀英
北京市职业技能鉴定管理中心试题管理科.
第九章 会计设置及机构.
2014吉林市卫生局事业单位招聘153名工作人员公告解读
各類所得扣繳法令 與申報實務 財政部北區國稅局桃園分局 103年9月25日
初級游泳教學.
爱国卫生工作的持续发展 区爱卫办 俞贞龙.
第八章 数学活动 方程组图象解法和实际应用
本课内容提要 一、汇率的含义 二、汇率变化与币值的关系 三、汇率变化的影响. 本课内容提要 一、汇率的含义 二、汇率变化与币值的关系 三、汇率变化的影响.
散文鉴赏方法谈.
比亚迪集成创新模式探究 深圳大学2010届本科毕业论文答辩 姓名:卓华毅 专业:工商管理 学号: 指导老师:刘莉
如何撰写青年基金申请书 报 告 人: 吴 金 随.
点击输 入标题 点击输入说明性文字.
國際志工海外僑校服務 越南 國立臺中教育大學 2010年國際志工團隊.
痰 饮.
ARM 嵌入式系统 第七章 嵌入式Linux.
學分抵免原則及 學分抵免線上操作說明會.
教 学 查 房 黄宗海 南方医科大学第二临床医学院 外科学教研室.
评 建 工 作 安 排.
“十二五”国家科技计划经费管理改革培训 概预算申报与审批 国家科学技术部 2012年5月.
“十二五”国家科技计划经费管理改革培训 概预算申报与审批 国家科学技术部 2012年5月.
首都体育学院 武术与表演学院 张长念 太极拳技击运用之擒拿 首都体育学院 武术与表演学院 张长念
现行英语中考考试内容与形式的利与弊 黑龙江省教育学院 于 钢 2016, 07,黄山.
第5讲:比较安全学的创建 吴 超 教授 (O)
2011计算机类教研活动 陈国久.
個人傷害險-鐵馬逍遙專案 商品介紹 商品特色 保障內容 承保對象 保險費 案例 業務費用及淨業績 車險部業務規劃科.
彰化縣西勢國小備課工作坊 新生入學的班級經營 主講:黃盈禎
重庆市西永组团K标准分区基本情况介绍.
西貢區歷史文化 清水灣 鍾礎營,楊柳鈞,林顥霖, 譚咏欣,陳昭龍.
長高 長壯 ㄋㄟㄋㄟ補給站 每天2份奶~~健康跟著來!.
安 全 維 護 臺 東 林 區 管 理 處 消費安全 詐騙防範宣導 健康生活 毒家新聞 杜絕不明匯款及金融轉帳操作
健康選擇飲品 營養師 顏妤蓉 2017/3/13.
全国国际商务英语考试(一级) 口试操作流程 全国国际商务英语考试中心 中国国际贸易学会商务专业培训考试办公室 2016年
103年度清水區農會四健推廣教育 第2單元 06月12 日 PM1:20-2:50 題目:六大類食物/均衡飲食金字塔 均衡飲食金字塔
LINUX 环境下程序开发基础 曙光用户培训课程系列 课程时间:1.5小时 更新日期:2008年3月.
無 人 島 求 生 記 慘遭流放人員: 999D0001 林芝瑩 999D0002 林宜蓁 999D0017 張椀琁
Linux环境下程序编译 曙光信息产业(北京)有限公司.
編譯環境介紹.
编译与多文件.
Linux下的程序编译和运行 曙光信息产业股份有限公司.
第 5 章、連結與載入 作者:陳鍾誠 旗標出版社.
2018/12/3 C++程序链接过程简介 杨森 2018/12/3.
第1章、系統軟體 作者:陳鍾誠 旗標出版社.
國立中山大學30週年校慶籌備委員會 中山大學30週年校慶籌備會 第二次工作會議 03/29/2010.
Linux核心編譯與模組管理 2013/01/19.
嵌入式Linux编程环境.
Presentation transcript:

张吉豫 zhangjiyu@mprc.pku.edu.cn 2005-03-12 GNU编译工具链使用简介 张吉豫 zhangjiyu@mprc.pku.edu.cn 2005-03-12

内容 GNU编译工具链的基本组成与工作流程 工具链的常用工具和选项 Unicore工具链与交叉编译

编译工具链的基本工作流程 一个“hello world”程序的演变历程 Pre-processor (cpp / Gcc -E) Compiler (cc1 / Gcc -S) Assembler (as / Gcc -c) Linker (ld) hello.c (text) hello.i (text) hello.s (text) hello.o (binary) hello (binary) printf.o (binary) 一个“hello world”程序的演变历程

GNU工具链的组成 GCC——GNU Compiler Collection Binutils——GNU binary utilities Glibc——GNU C Library ——软件开发的基本工具集合

GCC 功能: 组成:一组可执行程序 + 一组库 支持多种语言和目标机 高级语言(.c、.cpp、.F)->汇编语言(.s) 用户界面,驱动各工具的执行 组成:一组可执行程序 + 一组库 cpp、gcc、g++、g77 …… cpp0、cc1、cc1plus、f771 …… libgcc.a、crtbegin.o、crtend.o …… 支持多种语言和目标机

Binutils 功能: 组成:一组可执行程序 支持多种目标机 汇编语言(.s)->目标文件->可执行程序 查看二进制文件信息 as、ld objdump、readelf、ar …… 支持多种目标机

Glibc 功能: 组成:若干可执行程序 + 大量库 绝大部分与目标机无关 提供语言和操作系统的标准库函数 ldd、iconv、locale…… ISO C、POSIX、UNIX、GNU 绝大部分与目标机无关

GNU工具链的工作流程 扩展名的默认含义 需要预处理的源代码:.c、.cc、.F …… 不需预处理的源代码:.i、.ii、.f …… 需要预处理的汇编代码:.S 不需预处理的汇编代码:.s 目标文件:.o 静态库:.a 动态库:.so

.c、.cc、.F .i、.ii、.f .s、.o cpp0 … .c、.cc、.F .i、.ii、.f cc1、cc1plus、f771 … gcc g++ g77 …… .i、.ii、.f .s .s as libgcc.a …… .o .o ld、ar…… glibc 可执行程序或库

常用工具和选项 编译: 汇编和连接: 二进制工具: gcc/g++/g77 as、ld objdump、readelf、strip、ar、nm、ldd gprof、gcov

帮助选项 --help --target-help 显示与目标机有关的帮助信息,比如目标机的一些特殊选项

编译(1) gcc/g++/g77 [options] file... -Wall -g -O -O0 -O1 -O2 -O3 -Os 打印警告信息 -g 添加调试信息到输出文件 -O -O0 -O1 -O2 -O3 -Os 优化选项,若有多个则最后一个有效 -D -U 定义和取消宏定义 -msoft-float 使用软件库(libgcc.a)模拟硬件浮点指令

编译(2) -I -L -l -static -shared -pg -fprofile-arcs -ftest-coverage 指定头文件搜索路径,若有多个则从前往后搜索 -L 指定库搜索路径,若有多个则从前往后搜索 -l 指定引用的库,从当前位置向后搜索 -static -shared 使用静态连接或动态连接 -pg -fprofile-arcs -ftest-coverage 添加额外的统计代码用于profile,与gprof和gcov配合使用

编译(3) -E -S -c -o -v 输出预处理后的文件(.i、.ii、.f 等) 输出编译生成的汇编文件(.s) 指定输出文件名 -v 输出编译过程的详细信息,包括编译过程中以哪些参数调用了哪些程序。

编译(4) 基于profiling的优化编译 使用方法 根据程序执行反馈的信息指导编译优化以产生出更好的代码。 编译:添加-fprofile-arcs选项和其他优化选项进行编译,生成可执行程序 执行:执行程序,对每个源程序sourcefile生成sourcefile.da,其中保存了统计信息 重新编译:添加-fbranch-probabilities选项和其他相同的优化选项重新编译,生成质量更高的代码

汇编和连接 as [option...] [asmfile...] ld [options] file... 汇编器,可由gcc -c代替 ld [options] file... 连接器,可由gcc代替 通常由gcc调用,一般不直接使用

二进制工具 objdump readelf strip ar nm ldd gprof gcov

ELF可重定位目标文件示例 sections ELF header .text .rodata .data .bss .symtab .rel.text .rel.data .debug .line .strtab Section header tables sections

二进制工具(1) objdump [option(s)] [file(s)] 常用选项: 反汇编各种格式的目标文件和可执行程序 -d -D 只反汇编代码段 -D 反汇编代码段和数据段 -S 混合输出源代码和汇编代码,编译时必须加-g选项

二进制工具(2) readelf [option(s)] elf-file(s) 常用选项: 显示ELF格式文件信息 -e -s -r -a 显示头信息,包括ELF file header、section header、program header -s 显示符号表信息 -r 显示重定位信息 -a 显示所有信息

二进制工具(3) strip [option(s)] in-file(s) 常用选项: 删除输入文件的符号表和指定的section -o 指定输出文件名

二进制工具(4) ar 常用命令: 举例 取出libc.a中的所有目标文件(*.o)到当前目录 d m q r t x 分别用于删除、移动、添加、替换、显示、取出归档文件的内容 举例 ar x /usr/lib/libc.a 取出libc.a中的所有目标文件(*.o)到当前目录 ar q libmy.a obj1.o obj2.o 将obj1.o和obj2.o加入到libmy.a中

二进制工具(5) nm [option(s)] [file(s)] 举例 显示文件的符号信息,可用于各种目标文件、可执行程序和归档文件(.a) 举例 nm /usr/lib/libc.a > symbol …… printf.o: 00000000 T _IO_printf 00000000 T printf U stdout U vfprintf

二进制工具(6) ldd [OPTION]... FILE... 举例 输出动态连接程序的共享库依赖关系 [njt@Aquarius temp]$ ldd /bin/ls libtermcap.so.2 => /lib/libtermcap.so.2 (0x40028000) libacl.so.1 => /lib/libacl.so.1 (0x4002d000) libc.so.6 => /lib/i686/libc.so.6 (0x42000000) libattr.so.1 => /lib/libattr.so.1 (0x40033000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) [njt@Aquarius temp]$

二进制工具(7) gprof 根据程序执行产生的数据(gmon.out)输出profile信息,包括每个函数执行时间、所占比例、调用关系等。 可用于分析程序的关键代码,指导程序员进行优化 使用方法 编译:加-pg选项 执行:产生gmon.out(二进制数据) 显示:gprof program_name > output

二进制工具(8) gcov 使用方法 另一个profiling工具,可以分析程序一次执行过程中每行源代码的执行数量、branch跳转情况等。 可用于分析程序的关键代码和构造testsuite 源代码在gcc的包中,不属于binutils 使用方法 编译:加-fprofile-arcs -ftest-coverage选项,最好不加优化选项 执行:针对每个sourcefile产生sourcefile.bb、sourcefile.bbg、sourcefile.da(二进制数据) 显示:gcov sourcefile.c 生成sourcefile.gcov

Unicore工具链 移植GNU工具链到unicore系统 两套版本 uc1 uc2 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

Unicore工具链 使用方法 本地: 交叉编译: 与在x86上的本地工具链几乎没有什么区别 命令前都加上前缀unicore32-linux-, 如unicore32-linux-gcc 路径:.19:/usr/unicore/gnu-toolchain-unicore/uc2-0.3-hardfloat-glibc/bin make CC= CXX= F77=

如何学习 今天的报告 亲自使用 互相学习 info/man info gcc、info binutils、info libc …… ……

Thank you!