linux gcc生成map文件,make&&gcc/g++ 生成 map file

map file 对于嵌入式开发是非常有用的,尤其是当你开发的module引起了 kernel panic 的时候。

仅写作Mark用

make:

$vim makefile

(add  "LDFLAGS=-Map=your_file.map" to your *makefile* or just add it to your make command every time, it ups to you.)

$find / -name "your_file.map"

(Usually, It's in your current directory, but if you use a "make -C " in your makefile, it will be there.)

gcc/g++

$gcc -o your_file.c -Wl,-Map=your_file.map

(It definitely should be in your current dirctory).

[转]Linux下用gcc/g++生成静态库和动态库(Z)

Linux下用gcc/g++生成静态库和动态库(Z) 2012-07-24 16:45:10|  分类: linux |  标签:链接库  linux  g++  gcc  |举报|字号 订阅     ...

Linux 之 编译器 gcc/g++参数详解

2016年12月9日16:48:53 ----------------------------- 内容目录: [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++ ...

Linux-编译器gcc/g++编译步骤

gcc和g++现在是gnu中最主要和最流行的c&c++编译器.g++是c++的命令,以.cpp为主:对于c语言后缀名一般为.c,这时候命令换做gcc即可.编译器是根据gcc还是g++来确定是按 ...

gcc g++ 参数介绍

C和C++ 编译器是集成的.他们都要用四个步骤中的一个或多个处理输入文件: 预处理 (preprocessing),编译(compilation),汇编(assembly)和连接(linking).源 ...

<转载>gcc/g++编译

转载于:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/22/1782678.html 1. gcc/g++在执行编译工作的时候,总共需要4步 ...

scons用户指南翻译(附gcc/g++参数详解)

scons用户指南 翻译 http://blog.youkuaiyun.com/andyelvis/article/category/948141 官网文档 http://www.scons.org/docume ...

gcc/g++命令认识

gcc & g++是gnu中最主要和最流行的c & c++编译器 . g++用来针对c++的处理命令,以.cpp为后缀,对于c语言后缀名一般为.c.这时候命令换做gcc即可. 下面以T ...

gcc/g++编译

1. gcc/g++在执行编译工作的时候,总共需要4步 (1).预处理,生成.i的文件[预处理器cpp] (2).汇编,将预处理后的文件转换成汇编语言,生成文件.s[编译器egcs] (3).编译,将 ...

gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解

摘自http://blog.youkuaiyun.com/elfprincexu/article/details/45043971 gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解 C和C+ ...

随机推荐

getFields()和getDeclaredFields()的区别

getFields()获得某个类的所有的公共(public)的字段,包括父类. getDeclaredFields()获得某个类的所有申明的字段,即包括public.private和proteced, ...

ubuntu下修改进入root用户和修改文件权限

(1)进入root用户 su root 密码:设置的root密码 (2)修改文件权限 sudo chmod +777  file (3)执行shell ./shellfile (4)编写shell 第 ...

OC中修饰符:宏define 常量:const extern

const const最好理解,修饰的东西不能被修改 指针类型根据位置的不同可以理解成3种情况: I 常量指针 // 初始化之后不能赋值,指向的对象可以是任意对象,对象可变. NSString * c ...

Codeforces Testing Round #8 B. Sheldon and Ice Pieces 水题

题目链接:http://codeforces.com/problemset/problem/328/B 水题~ #include #include

【ecos学习1】wmware运行redboot[方法一]--脚本实现配置

背景: 远程服务器Ubuntu生成软盘镜像,通过Mac下wmware运行. 1- 环境及版本: uname -a 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 ...

Browserify: 使nodejs模块可以在浏览器下使用

Browserify:浏览器加载Node.js模块--------------------------------------------------随着JavaScript程序逐渐模块化,在ECMA ...

Qt+gsoap调用WebService

1.       前言 Qt本身给我们提供了调用WebService的解决方案qsoap,看了一下他的介绍,感觉实在是太弱了,而且又是个新出的东西,所以还是决定不用他.既然使用Qt,那当然是跨平台的解 ...

maven引入已经拥有的jar包

    ...

30分钟掌握ES6/ES2015核心内容(上)

ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

[POI2012]Odległość

[POI2012]Odległość 题目大意: 一个长度为\(n(n\le10^5)\)的序列\(A(1\le A_i\le10^6)\),定义\(d(i,j)\)为每次对\(A_i,A_j\)中的 ...

<think>好的,用户现在问的是关于C语言编码中如何利用.map文件查找编译时间的问题。首先,我需要确认用户的需求。他们可能是在开发过程中遇到了编译时间过长的问题,想要通过分析.map文件来定位耗时的地方。不过,根据我的知识,.map文件通常是链接器生成的,主要包含内存布局、符号地址、段大小等信息,并不直接记录编译时间。所以用户可能存在误解,以为.map文件包含编译时间数据。 接下来,我应该考虑用户的背景。他们可能对编译和链接的过程不太熟悉,分不清编译和链接阶段的不同产物。需要解释清楚.map文件的作用,并引导他们使用其他方法来分析编译时间。比如,可以介绍编译器提供的特定选项,如GCC-ftime-report,或者使用构建系统工具如CMake、Make来生成时间报告。 另外,用户可能是在寻找优化编译速度的方法,所以需要提供一些通用的优化建议,比如减少头文件依赖、使用预编译头文件、并行编译等。这些建议能帮助他们实际缩短编译时间,而不仅仅是测量。 还要注意用户提到的“查找编译时间”可能有两个方面:一是整体编译耗时,二是各个源文件的编译时间分布。需要分别说明如何获取这些信息,并推荐合适的工具,如time命令、Clang的-ftime-trace,或者第三方工具如Bear和Clang Build Analyzer。 最后,确保回答结构清晰,分步骤说明,并指出.map文件不包含时间信息,避免用户继续在错误的方向上浪费时间。同时,建议备份和谨慎操作,防止他们在尝试过程中遇到问题。</think>在C语言开发中,`.map`文件(链接映射文件)主要用于记录内存分配、符号地址和代码段/数据段布局等信息,但它**不直接包含编译时间信息**。若需要查找编译时间,可以通过以下方法实现: --- ### **一、替代方案:获取编译时间** #### 1. **编译器诊断选项** - **GCC/Clang**:添加 `-ftime-report` 编译选项 ```bash gcc -ftime-report -c your_file.c ``` - 输出各阶段耗时(解析、优化、代码生成等) ![GCC时间报告示例](https://i.imgur.com/4Tv9oQd.png) - **MSVC**:使用 `/Bt` 和 `/d2cgsummary` 选项 ```bash cl /Bt /d2cgsummary your_file.c ``` #### 2. **构建系统工具** - **CMake**:启用时间跟踪 ```cmake set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "time -v") ``` - **Makefile**:通过 `time` 命令包装编译过程 ```makefile CC = time gcc ``` #### 3. **专用工具** - **Clang Build Analyzer** ```bash ninja -t compdb > compile_commands.json ClangBuildAnalyzer --all compile_commands.json ``` - **Bear + Clang Time Trace** ```bash bear make # 生成编译命令数据库 clang -ftime-trace your_file.c ``` --- ### **二、.map文件的核心作用** 虽然无法获取编译时间,但.map文件可用于: 1. **内存布局分析** ```text .text 0x08000000 0x200 # 代码段地址和大小 .data 0x20000000 0x100 # 数据段地址和大小 ``` 2. **符号定位** ```text 0x08000100 main # 函数入口地址 0x20000004 global_var # 全局变量地址 ``` 3. **优化代码体积** 通过分析`.map`中的段大小,定位冗余代码。 --- ### **三、编译时间优化建议** 1. **减少头文件依赖** - 使用前向声明(Forward Declaration) - 避免`#include`在头文件中嵌套传播 2. **预编译头文件(PCH)** ```bash gcc -xc-header stdafx.h # 生成.gch预编译文件 ``` 3. **并行编译** ```bash make -j8 # 使用8线程编译 ``` 4. **增量编译工具** - `ccache` 缓存已编译对象文件 --- ### **四、操作示例:GCC时间分析** ```bash # 1. 编译并生成时间报告 gcc -ftime-report -O2 main.c -o main # 2. 输出结果示例 Time variable usr sys wall GGC phase setup : 0.00 ( 0%) 0.00 0.00 0.00 ( 0%) 2526 kB ( 3%) phase parsing : 2.34 ( 88%) 2.34 0.00 2.34 ( 88%) 62431 kB ( 78%) phase opt and generate : 0.31 ( 12%) 0.31 0.00 0.31 ( 12%) 12745 kB ( 16%) ``` --- ### **注意事项** 1. 不同编译器(GCC/MSVC/Clang)的时间报告格式不同 2. 调试完成后需移除时间分析选项,避免影响发布版本性能 3. 推荐结合`ninja`或`Bear`工具实现自动化分析 如果需要更具体的编译时间优化方案,请提供您的编译环境和项目结构细节!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值