关于编译的时候生成MAP文件

本文详细介绍了MSDN中的MAP和MAPINFO选项,解释了如何通过这些选项生成Map文件及自定义文件名,并提供了使用这些选项的具体示例。此外还讲解了Map文件的内容结构及其在调试中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【0. MSDN中关于参数的说明】

/MAP    (生成 Map文件)

这个选项告诉连接器要生成一个map文件。

命令行干吗的备注
/MAP生成MAP文件默认生生成的map文件是程序名+.map
/MAP:filename指定Map文件名不用默认文件名,用你指定的文件名

map文件包含了要连接的程序的一下信息:

  • 模块名
  • 程序代码中的各个代码group的名, 包括这些group的 start address (as section:offset), length, group name, and class
  • public symbols, 包括 address (as section:offset), symbol name, flat address, and .OBJ file where the symbol is defined
  • entry point (as section:offset)

/MAPINFO    (指定map文件中要包含的信息)

【语法】

/MAPINFO:{EXPORTS|FIXUPS|LINES}

指定了/MAP选项之后才能用这个。这个是告诉连接器把什么信息包含到map文件中。

  • EXPORTS 包含输出函数,如果是dll的话用得上
  • FIXUPS 基址重定位信息
  • LINES 代码的行信息

-----------------------------------------总结&应用-------------------------------------------------

【1. MAP文件生成过程】

例如,代码是test.c。对于VC 6.0的编译器来说,命令行编译过程如下(不用IDE):

1.cl /c /Zd test.c

2.link /map /mapinfo:lines test.obj

3.最后就会生成:test.exe和test.map

【2. 使用MAP文件调试的例子在这里】

http://www.cnblogs.com/gaotaozhaolei/archive/2008/02/02/1062155.html


原文链接:http://ihacku.blog.163.com/blog/static/163025145201032694723537/

MSDN资源:http://msdn.microsoft.com/zh-cn/library/k7xkk3e2(v=vs.80).aspx

<think>好的,我现在需要帮助用户解决在KEIL中生成MAP文件的配置问题。首先,用户明确询问的是方法和设置教程,所以我的回答需要步骤清晰,便于用户跟随操作。 首先,我要回忆KEIL的配置流程。记得在Project的Options里,Linker部分有生成MAP文件的选项。可能需要勾选某个复选框或输入参数。然后,具体步骤大概是:打开项目,进入Options for Target,找到Linker标签页,设置相关选项,比如勾选生成MAP文件或添加额外的参数。 接下来,我需要确认这些步骤是否正确。根据用户提供的引用,特别是引用[1]和[5],提到Map文件用于分析内存布局和调试内存溢出问题,说明生成MAP文件确实在项目开发中很重要。引用[2]和[3]解释了MAP文件的内容,比如代码段、数据段的位置和大小,这些信息对用户分析问题有帮助。 然后,考虑到用户可能不太熟悉KEIL的界面,我需要详细描述每一步的操作路径。例如,Project -> Options for Target -> Linker,然后找到相应的选项。可能需要指出不同的KEIL版本(如MDK-ARM)界面可能略有不同,但大体步骤相似。 另外,用户提供的引用[4]提到模块和函数的表示方式,这可能涉及到MAP文件中的内容解析,但用户的问题是关于生成而非解析,所以这部分可能暂时不需要详细展开,但可以作为相关问题提到。 还需要注意是否需要额外的链接器参数,比如使用“--map”或“--info=...”来增加详细信息。这部分可能对高级用户有用,但基础设置可能只需要勾选一个选项即可。 可能的疑问点:是否有不同的配置方式,比如使用分散加载文件(scatter file)是否会影响MAP文件生成?根据经验,生成MAP文件通常不依赖分散文件,但分散文件会影响内存布局,所以MAP文件会反映这些设置。 此外,需要提醒用户生成MAP文件的位置,通常是项目输出目录,方便他们找到文件进行查看。 最后,生成的相关问题需要围绕用户可能的后续需求,比如如何分析MAP文件,优化内存,或解决溢出问题,以及配置中的其他注意事项,如版本差异或参数优化。</think>### KEIL中生成MAP文件的配置方法及设置教程 在KEIL中生成MAP文件是调试和分析程序内存布局的重要手段,以下是详细步骤: --- #### **步骤1:打开项目配置** 1. 在KEIL MDK中打开目标工程。 2. 右键点击左侧 **Target**,选择 **Options for Target...**,或通过菜单栏 **Project > Options for Target...** 进入配置界面[^1]。 --- #### **步骤2:配置Linker选项** 1. 在配置窗口中切换到 **Linker** 选项卡。 2. **勾选以下选项**: - **Use Memory Layout from Target Dialog**:使用默认内存布局(若需自定义,需通过分散加载文件配置)。 - **Enable Linker Map File Generation**:启用MAP文件生成[^2]。 --- #### **步骤3:设置MAP文件输出参数(可选)** 1. 在 **Linker** 选项卡的 **Misc controls** 输入框中,可添加以下参数以控制MAP文件内容: ```plaintext --map --info=summarysizes,totals,unused,veneers ``` - `--map`:强制生成MAP文件。 - `--info=...`:指定输出详细信息类型,例如内存统计、未使用段等[^3]。 --- #### **步骤4:编译生成文件** 1. 保存配置后,点击 **Rebuild** 或 **Build** 按钮重新编译项目。 2. 生成MAP文件默认位于工程目录下的 **\Objects** 或 **\Listings** 文件夹中,文件名为 `<工程名>.map`。 --- #### **验证MAP文件内容** 打开MAP文件,主要部分包括: - **Section Cross References**:代码段交叉引用关系。 - **Memory Map**:内存分布详情(如`.text`、`.data`、`.bss`的地址和大小)。 - **Symbol Table**:全局变量和函数的地址信息[^3][^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值