1、ARM 应用系统开发详解 基于 S3C4510B 的系统设计 第 8章 ARM ADS集成开发环境的使用 在这一章里,将介绍 ARM 开发软件 ADS(ARM Developer Suite)。通过学习如何在CodeWarrior IDE 集成开发环境下编写,编译一个工程的例子,使读者能够掌握在 ADS 软件平台下开发用户应用程序。本章还描述了如何使用 AXD 调试工程,使读者对于调试工程有个初步的理解,为进一步的使用和掌握调试工具起到抛砖引玉的作用。 本章主要内容有: ADS 软件组成介绍 使用 ADS 创建工程 用 AXD 进行代码调试 8.1 ADS 集成开发环境组成介绍 ARM ADS
2、 全称为 ARM Developer Suite。是 ARM 公司推出的新一代 ARM 集成开发工具。现在 ADS 的最新版本是 1.2,它取代了早期的 ADS1.1 和 ADS1.0。它除了可以安装在Windows NT4, Windows 2000, Windows 98 和 Windows 95 操作系统下,还支持 Windows XP和 Windows Me 操作系统。 ADS 由命令行开发工具, ARM 时实库, GUI 开发环境 (Code Warrior 和 AXD),实用程序和支持软件组成。 有了这些部件,用户就可以为 ARM 系列的 RISC 处理器 编写和调试自己的开发应用
3、程序了。 下面就详细介绍一下 ADS 的各个组成部分。 8.1.1 命令行开发工具 这些工具完成将源代码编译,链接成可执行代码的功能。 ADS 提供下面的命令行开发工具: armcc armcc 是 ARM C 编译器。这个编译器通过了 Plum Hall C Validation Suite 为 ANSI C 的一致性测试。 armcc 用于将用 ANSI C 编写的程序编译成 32 位 ARM 指令代码。 因为 armcc 是我们最常用的编译器,所以对此作一个详细的介绍。 在命令控制台环境下,输入命令: armcc help 可以查看 armcc 的语法格式以及最常用的一些操作选项 arm
4、cc 最基本的用法为: armcc options file1 file2 . filen 这里的 option 是编译器所需要的选项, fiel1,file2 filen 是相关的文件名。 这里简单介绍一些最常用的操作选项。 -c:表示只进行编译不链接文件; -C: (注意:这是大写的 C)禁止预编译器将注释行移走; -D:定义预处理宏,相当于在源程序开头使用了宏定义语句 #define symbol , 这里 symbol 默认为 1; -E:仅仅是对 C 源代码进行预处理就停止; ARM 应用系统开发详解 基于 S3C4510B 的系统设计 -g:指定是否在生成的目标文件中包含调试信息表
5、; -I:将 directory 所指的路径添加 到 #include 的搜索 路径列表 中去; -J:用 directory 所指的路径代替默认的对 #include 的搜索路径; -o:指定编译器最终生成的输出文件名。 -O0:不优化; -O1:这是控制代码优化的编译选项,大写字母 O 后面跟的数字不同,表示的优化级别就不同, -O1 关闭了影响调试 结果的优化功能; -O2:该优化级别提供了最大的优化功能; -S:对源程序进行预处理和编译,自动生成汇编文件而不是目标文件; -U:取消预处理宏名,相当于在源文件开头,使用语句 #undef symbol; -W:关闭所有的或被选择的警告信息
6、; 有关更详细的选项说明,读者可查看 ADS 软件的在线帮助文件。 armcpp armcpp 是 ARM C+编译器。它将 ISO C+ 或 EC+ 编译成 32 位 ARM 指令代码。 tcc tcc 是 Thumb C 编译器。该编译器通过了 Plum Hall C Validation Suite 为 ANSI 一致性的测试。 tcc 将 ANSI C 源代码编译成 16 位的 Thumb 指令代码。 tcpp tcpp 是 Thumb C+ 编译器。 它将 ISO C+ 和 EC+ 源码编译成 16 位 Thumb 指令代码。 armasm armasm是 ARM 和 Thumb 的
7、汇编器 . 它对用 ARM 汇编语言和 Thumb 汇编语言写的源代码进行汇编。 armlink armlink 是 ARM 连接器。该命令既可以将编译得到的一个或多个目标文件和相关的一个或多个库文件进行链接,生成一个可 执行文件,也可以将多个目标文件部分链接成一个目标文件,以供进一步的链接。 ARM 链接器生成的是 ELF 格式的可执行映像文件。 armsd armsd 是 ARM 和 Thumb 的符号调试器。它能够进行源码级的程序调试。用户可以在用 C 或汇编语言写的代码中进行单步调试,设置断点,查看变量值和内存单元的内容。 8.1.1.1 armcc 用法详解 下面为读者介绍上述的 4
8、 种 ARM C 和 C+编译器的命令通用语法。 compiler PCS-options source-language search-paths preprocessor-options output-format target-options debug-options code-generation-options warning-options additional-checks error-options source 用户可以通过命令行操作选项控制编译器的执行。所有的选项都是以符号 ”-”开始,有些选项后面还跟有参数。在大多数情况下, ARM C 和 C+编译器允许在选项和参数之
9、间存在空格。 命令行中各个选项 出现顺序可以任意。 这里的 compiler 是指 armcc, tcc, armcpp 和 tcpp 中的一个; PCS-options:指定了要使用的过程调用标准; source-language:指定了编译器可以接受的编写源程序的语言种类。对于 C 编译器默认的语言是 ANSI C,对于 C+编译器默认是 ISO 标准 C+; search-paths:该选项指定了对包含的文件 (包括源文件和头文件 )的搜索路径; ARM 应用系统开发详解 基于 S3C4510B 的系统设计 preprocessor-options:该选项指定了预处理器的行为,其中包括预
10、处理器的输出和宏定义等特性; output-format:该选项指定了编译器的输出格式,可以使用该项生成汇编语言输出列表文件和目标文件; target-options:该选项指定目标处理器或 ARM 体系结构; debug-options:该选项指定调试信息表是否生成,和该调试信息表生成时的格式; code-generation-options:该选项指定了例如优化,字节顺序和由编译器产生的数据对齐格式等选项; warning-options:该选项决定警告信息是否产生; additional-checks:该选项指定了几个能用于源码的附加检 查,例如检查数据流异常,检查没有使用的声明等; e
11、rror-options:该选项可以关闭指定的可恢复的错误,或者将一些指定的错误降级为警告; source:该选项提供了包含有 C 或 C+源代码的一个或多个文件名,默认的,编译器在当前路径寻找源文件和创建输出文件。如果源文件是用汇编语言编写的 (也就是说该文件的文件名是以 .s 作为扩展名 ),汇编器将被调用来处理这些源文件。 如果操作系统对命令行的长度有限制,可以使用下面的操作,从文件中读取另外的命令行选项: -via filename 该命令打开文件名为 filename 的文件,并从中读取命令行选项。用户可以对 -via 进行嵌套调用,亦即,在文件 filename 中又通过 -via
12、 finlename2 包含了另外一个文件。 在下面的例子中,从 input.txt 文件中读取指定的选项,作为 armcpp 的操作选项: armcpp -via input.txt source.c 以上是对编译器选项的一个简单概述。它们 (包括后面还要介绍的其他一些命令工具 )既可以在命令控制台环境下使用,同时由于它们被嵌入到了 ADS 的图形界面中,所以也可以在图形界面下使用。 8.1.1.2 armlink 用法详解 在介绍 armlink 的使用方法之前,先介绍要涉及到的一些术语。 映像文件 (image):是指一个可执行文件,在执行的时候被加载到处理器中。一个映像文件有多个线程。
13、它是 ELF(Executable and linking format)格式的。 段 (Section):描述映像文件的代码或数据块。 RO:是 Read-only 的简写形式。 RW:是 Read-write.的简写形式。 ZI:是 Zero-initialized 的简写形式。 输入段 (input section):它包含着代码,初始化数 据或描述了在应用程序运行之前必须要初始化为 0 的一段内存。 输出段 (output section):它包含了一系列具有相同的 RO, RW 或 ZI 属性的输入段。 域 (Regions):在一个映像文件中,一个域包含了 1 至 3 个输出段。多
14、个域组织在一起,就构成了最终的映像文件。 Read Only Position Independent(ROPI):它是指一个段,在这个段中代码和只读数据的地址在运行时候可以改变。 Read Write Position Independent(RWPI):它是指一个段,在该段中的可读 /写的数据地址在运行期间可以改变。 加载时地址:是指映像文件位于存储器 (在该映像文件没有运行时 )中的地址。 ARM 应用系统开发详解 基于 S3C4510B 的系统设计 运行时地址:是指映像文件在运行时的地址。 下面介绍一下 armlink 命令的语法 完整的连接器命令语法如下: armlink -help
15、 -vsn -partial -output file -elf -reloc-ro-base address -ropi -rw-base address -rwpi -split -scatter file-debug|-nodebug-remove?RO/RW/ZI/DBG|-noremove -entry location -keep section-id -first section-id -last section-id -libpath pathlist -scanlib|-noscanlib -locals|-nolocals -callgraph -info topics -
16、map -symbols -symdefs file -edit file -xref -xreffrom object(section) -xrefto object(section) -errors file -list file -verbose -unmangled |-mangled -match crossmangled-via file -strict -unresolved symbol-MI|-LI|-BI input-file-list 上面各选项的含义分别为: -help 这个选项会列出在命令行中常用的一些选项操作。 -vsn 这个选项显示出所用的 armlink 的版本
17、信息。 -partial 用这个选项创建的是部分链接的目标文件而不是可执行映像文件。 -output file 这个选项指定了输出文件名,该文件可能是部分链接的目标文件,也可能是可执行映像文件。如果输出文件名没有特别指定的话, armlink 将使用下面的默认: 如果输出是一个可执行映像文件,则生成的输出文件名为 _image.axf; 如果输出是一个部分链接的目标文件,在 生成的文件名为 _object.o; 如果没有指定输出文件的路径信息,则输出文件就在当前目录下生成。如果指定了路径信息,则所指定的路径成为输出文件的当前路径。 -elf 这个选项生成 ELF 格式的映像文件,这也是 arm
18、link 所支持的唯一的一种输出格式,这是默认选项。 -reloc 这个选项生成可重定址的映像。 一个可重定址的映像具有动态的段,这个段中包含可重定址信息,利用这些信息可以在链接后,进行映像文件的重新定址; -reloc, -rw-base 一起使用,但是如果没有 -split 选项,链接时会产生错误。 -ro-base address 这个选项将包含有 RO(Read-Only 属性 )输出段的加载地址和运行地址设置为 address,该地址必须是字对齐的,如果没有指定这个选项,则默认的 RO 基地址值为 0x8000。 -ropi 这个选项使得包含有 RO 输出段的加载域和运行域是位置无关
19、的。如果该选项没有使用,则相应的域被标记为绝对的。通常每一个只读属性的输入段必须是只读位置无关的。如果使用了这个选项, armlink 将会进行以下操作: 检查各段之间的重定址是否有效; 确保任何由 armlink 自身生成的代码是只读位置 无关的。 这里希望读者注意的是, ARM 工具直到 armlink 完成了对输入段的处理后,才能够决定最终的生成映像是否为只读位置无关的。这就意味着 ,即使为编译器和汇编器指定了ARM 应用系统开发详解 基于 S3C4510B 的系统设计 ROPI 选项, armlink 也可能会产生 ROPI 错误信息。 -rw-base address 这个选项设置包
20、含 RW(Read/Write 属性 )输出段的域的运行时地址,该地址必须是字对齐的。 如果这个选项和 -split 选项一起使用,将设置包含 RW 输出段的域的加载和运行时地址都设置在 address 处。 -rwpi 这个选项使得包含有 RW 和 ZI(Zero Initialization,初始化为 0)属性的输出段的加载和运行时域为位置无关的。如果该选项没有使用,相应域标记为绝对的。这个选项要求 -rw-base选项后有值,如果 -rw-base 没有指定的话,默认其值为 0,即相当于 -rw-base 0。通常每一个可写的输入段必须是可读 / 可写的位置无关的。 如果使用了该选项,
21、armlink 会进行以下的操作: 检查可读 /可写属性的运行域的输入段是否设置了位置无关属性; 检查在各段之间的重定址是否有效; 生成基于静态寄存器 sb 的条目,这些在 RO 和 RW 域被拷贝和初 始化的时候会用到。 编译器并不会强制可写的数据一定要为位置无关的,这就是说,即使在为编译器和汇编器指定了 RWPI 选项, armlink 也可能生成数据不是 RWPI 的信息。 -split 这个选项将包含 RO 和 RW 属性的输出段的加载域,分割成 2 个加载域。一个是包含RO 输出段的加载域,默认的加载地址为 0x8000,但是可以用 -ro-base 选项设置其他的地址值,另一个加载
22、域包含 RO 属性的输出段,由 -rw-base 选项指定加载地址,如果没有使用-rw-base 选项的话,默认使用的是 -rw-base 0。 -scatter file 这个选项使用在 file 中包含的分组和定位信息来创建映像内存映射。 注意,如果使用了该选项的话,必须要重新实现堆栈初始化函数_user_initial_stackheap()。 -debug 这个选项使输出文件包含调试信息,调试信息包括,调试输入段,符号和字符串表。这是默认的选项。 -nodebug 这个选项使得在输出文件中不包含调试信息。生成的映像文件短小,但是不能进行源码级的调试。 armlink 对在输入的目标文件
23、和库函数中发现的任何调试输入段都不予处理,当加载映像文件到调试器中的时候,也不 包含符号和字符串信息表。这个选项仅仅是对装载到调试器的映像文件的大小有影响,但是对要下载到目标板上的二进制代码的大小没有任何影响。 如果用 armlink 进行部分链接生成目标文件而不是映像文件,则虽然在生成的目标文件中不含有调试输入段,但是会包含符号和字符串信息表。 这里特别请读者注意的是: 如果要在链接完成后使用 fromELF 工具的话,不可使用 -nodebug 选项,这是因为如果生成的映像文件中不包含调试信息的话,则有下面的影响: fromELF 不能将映像文件转换成其他格式的文件; fromELF 不能
24、生成有意 义的反汇编列表。 -remove (RO/RW/ZI/DBG) 使用这个选项会将在输入段未使用的段从映像文件中删除。如果输入段中含有映像文件ARM 应用系统开发详解 基于 S3C4510B 的系统设计 入口点或者该输入段被一个使用的段所引用,则这样的输入段会当作已使用的段。 在使用这个选项时候要注意,不要删除异常处理函数。使用 -keep 选项来标识异常处理函数,或用 ENTRY 伪指令标明是入口点。 为了更精确的控制删除未使用的段,可以使用段属性限制符。可以使用以下的段属性限制符: RO 删除所有未使用的 RO 属性的段; RW 删除所有未使用的 RW 属性的段; ZI 删除所有未
25、 使用的 ZI 属性的段; DBG 删除所有未使用的 DEBUG 属性的段。 这些限制符出现的顺序是任意的,但是它们必须要有 ”( )”括住,多个限制符之间要用符号 ”/”进行间隔。 ADS 软件中默认选项是 -remove (RO/RW/ZI/DBG)。 如果没有指定段属性限制符,则所有未使用的段都会被删除。因为 -remove 就等价于-remove(RO/RW/ZI/DBG)选项。 -noremove 这个选项保留映像文件中所有未被使用的段。 -entry location 这个选项指定映像文件中唯一的初始化入口点。一个映像 文件可以包含多个入口点,使用这个命令定义的初始化入口点是存放在
26、可执行文件的头部,以供加载程序加载时使用。当一个映像文件被装载时, ARM 调试器使用这个入口点地址来初始化 PC 指针。初始化入口点必须满足下面的条件: 映像文件的入口点必须位于运行域内; 运行域必须是非覆盖的,并且必须是固定域 (就是说,加载域和运行域的地址相同 )。 在这里可以用以下的参数代替 location 参数: 1. 入口点地址:这是一个数值,例如 -entry 0x0; 2. 符号:该选项指定映像文件的入口点为该符号所代表的地址处,比如: -entry int_handler 表示程序入口点在符号 int_handler 所在处。 如果该符号有多处定义存在, armlink 将
27、产生出错信息。 offset+object(section):该选项指定在某个目标文件的段的内部的某个偏移量处为映像文件的入口地址,例如: -entry 8+startup(startupseg) 如果偏移量值为 0,可以简写成 object(section),如果输入段只有一个,则可以简化为object。 -keep section-id 使用该选项,可以指定保留一个输入段,这样的话 ,即使该输入段没有在映像文件中使用,也不会被删除。参数 section-id 取下面一些格式: 1 symbol 该选项指定定义 symbol 的输入段不会在删除未使用的段时被删除。如果映像文件中有多处 sym
28、bol 定义存在,则所有包含 symbol 定义的输入段都不会被删除。例如: -keep int_handler ARM 应用系统开发详解 基于 S3C4510B 的系统设计 则所有定义 int_handler 的符号的段都会保留,而不被删除。 为了保留所有含有以 _handler 结尾的符号的段,可以使用如下的选项: -keep *_handler 2 object(section) 这个选项指定了在删除未使用段时,保留目标文件中的 section 段。输入段和目标名是不区分大小写的,例如,为了在目标文件 vectors.o 中保留 vect 段,使用: -keep vectors.o(ve
29、ct) 为了保留 vectors.o 中的所有以 vec 开头的段名,可以使用选项: -keep vectors.o(vec*) 3 object 这个选项指定在删除未使用段时,保留该目标文件唯一的输入段。目标名是不区分大小写的,如果使用这个选项的时候,目标文件中所含的输入段不止一个的话, armlink 会给出出错信息。比如 ,为了保留每一个以 dsp 开头的只含有唯一输入段的目标文件,可以使用如下的选项: -keep dsp*.o -first section-id 这个选项将被选择的输入段放在运行域的开始。通过该选项,将包含复位和中断向量地址的段放置在映像文件的开始,可以用下面的参数代替
30、 section-id: 1 symbol 选择定义 symbol 的段。禁止指定在多处定义的 symbol,因为多个段不能同时放在映像文件的开始。 2 object(section) 从目标文件中选择段放在映像文件的开始位置。在目标文件和括号之间不允许 存在空格,例如 -first init.o(init) 3 object 选择只有一个输入段的目标文件。如果这个目标文件包含多个输入段, armlink 会产生错误信息。用这个选项的例子如下: -first init.o 这里希望读者注意的是: 使用 -first 不能改变在域中按照 RO 段放在开始,接着放置 RW 段,最后放置 ZI 段的
31、基本属性排放顺序。如果一个域含有 RO 段,则 RW 或 ZI 段就不能放在映像文件的开头。类似地,如果一个域有 RO 或 RW 段,则 ZI 段就不能放在文件开头。 两个不同的段不能放在同一个运行时域的开头,所 以使用该选项的时候只允许将一个段放在映像文件的开头。 -last section-id 这个选项将所选择的输入段放在运行域的最后。例如,用这个选项能够强制性的将包含校验和的输入段放置在 RW 段的最后。使用下面的参数可以替换 section-id。 1. symbol 选择定义 symbol 的段放置在运行域的最后。不能指定一个有多处定义的 symbol。使用该参数的例子如下: -l
32、ast checksum 2. object(section) 从目标文件中选择 section 段。在目标文件和后面的括号间不能有空格, 用该参数的例ARM 应用系统开发详解 基于 S3C4510B 的系统设计 子为: -last checksum.o(check) 3. object 选择只有一个输入段的目标,如果该目标文件中有多个输入段, armlink 会给出出错信息。 和 -first 选项一样,需要读者注意的是 ; 使用 -last 选项不能改变在域中将 RO 段放在开始,接着放置 RW 段,最后放置 ZI 段的输出段基本的排放顺序。如果一个域含有 ZI 段,则 RW 段不能放在最
33、后,如果一个域含有RW 或 ZI 段,则 RO 段不能放在最后。 在同一个运行域中,两个不同的段不能同时放在域的最后位置。 -libpath pathlist 这个 选项为 ARM 标准的 C 和 C+库指定了搜索路径列表。 注意,这个选项不会影响对用户库的搜索路径。 这个选项覆盖了环境变量 ARMLIB 所指定的路径。参数 pathlist 是一个以逗号分开的多个路径列表,即为 path1, path2,. pathn,这个路径列表只是用来搜索要用到的 ARM 库函数。默认的,对于包含 ARM 库函数的默认路径是由环境变量 ARMLIB 所指定的。 -scanlib 这个选项启动对默认库 (
34、标准 ARM C 和 C+库 )的扫描以解析引用的符号。这个选项是默认的设置。 -noscanlib 该选项 禁止在链接时候扫描默认的库。 -locals 这个选项指导链接器在生成一个可执行映像文件的时候,将本地符号添加到输出符号信息表中。该选项是默认设置。 -nolocals 这个选项指导链接器在生成一个可执行映像文件的时候,不要将本地符号添加到输出符号信息表中。如果想减小输出符号表的大小,可以使用该选项。 -callgraph 该选项创建一个 HTML 格式的静态函数调用图。这个调用图给出了映像文件中所有函数的定义和引用信息。对于每一个函数它列出了: 1. 函数编译时候的处理器状态 (AR
35、M 状态还是 Thumb 状态 ); 2. 调用 func 函数的集合; 3. 被 func 调用的函数的集合; 4. 在映像文件中使用的 func 寻址的次数。 此外,调用图还标识了下面的函数: 1. 被 interworking veneers 所调用的函数; 2. 在映像文件外部定义的函数; 3. 允许未被定义的函数 (以 weak 方式的引用 ); 静态调用图还提供了堆栈使用信息,它显示出了: 1. 每个函数所使用的堆栈大小; 2. 在全部的函数调用中,所用到的最大堆栈大小。 -info topics 这个选项打印出关于指定种类的信息,这里的参数 topics 是指用逗号间隔的类型标识
36、符列表。类型标识符列表 可以是下面所列出的任意一个: ARM 应用系统开发详解 基于 S3C4510B 的系统设计 1. sizes 为在映像文件中的每一个输入对象和库成员列出了代码和数据 (这里的数据包括, RO 数据, RW 数据, ZI 数据和 Debug 数据 )的大小; 2. totals 为输入对象文件和库,列出代码和数据 (这里的数据包括, RO 数据, RW 数据, ZI 数据和 Debug 数据 ) 总的大小; 3. veneers 给出由 armlink 生成的 veneers 的详细信息; 4. unused 列出由于使用 -remove 选项而从映像文件中被删除的所有未
37、使用段。 注意:在信息类型标识符列表之间不能存在空 格,比如可以输入 -info sizes,totals 但是不能是 -info sizes, totals(即在逗号和 totals 之间有空格是不允许的 ) -map 这个选项创建映像文件的信息图。映像文件信息图包括映像文件中的每个加载域,运行域和输入段的大小和地址,这里的输入段还包括调试信息和链接器产生的输入段。 -symbols 这个选项列出了链接的时候使用的每一个局部和全局符号。该符号还包括链接生成的符号。 -symdefs file 这个选项创建一个包含来自输出映像文件的全局符号定义的符号定义文件。 默认的,所有的全局符号都写入到符
38、号定义文件中。如果文件 file 已经存在,链接器将限制生成在已存在的 symdefs 文件中已列出的符号。 如果文件 file 没有指明路径信息,链接器将在输出映像文件的路径搜索文件。如果文件没有找到,就会在该目录下面创建文件。 在链接另一个映像文件的时候,可以将符号定义文件作为链接的输入文件。 -edit file 这个选项指定一个 steering 类型的文件,该文件包含用于修改输出文件中的符号信息表的命令。可以在 steering 文件中指定具有以下功能的命令: 隐藏全局符号。使用该选 项可以在目标文件中隐藏指定的全局符号。 重命名全局符号。使用这个选项可以解决符号命名冲突的现象。 -
39、xref 该选项列出了在输入段间的所有交叉引用。 -xreffrom object(section) 这个选项列出了从目标文件中的输入段对其他输入段的交叉引用。如果想知道某个指定的输入段中的引用情况,就可以使用该选项。 -xrefto object(section) 该选项列出了从其他输入段到目标文件输入段的引用。 -errors file 使用该选项会将诊断信息从标准输出流重定向到文件 file 中。 -list file 该选项将 -info, -map, -symbols, -xref, -xreffrom 和 xrefto 这几个选项的输出重新定向到文件 file 中。 ARM 应用系
40、统开发详解 基于 S3C4510B 的系统设计 如果文件 file 没有指定路径信息,就会在输出路径创建该文件,该路径是输出映像文件所在的路径。 -verbose 这个选项将有关链接操作的细节打印出来,包括所包括的目标文件和要用到的库。 -unmangled 该选项指定链接器在由 xref, -xreffrom, -xrefto,和 -symbols 所生成的诊断信息中显示出 unmangled C+符号名 。 如果使用了这个选项,链接器将 unmangle C+符号名以源码的形式显示出来。这个选项是默认的。 -mangled 这个选项指定链接器显示由 -xref, -xreffrom, -x
41、refto,和 -symbols 所产生的诊断信息中的 mangled C+符号名。如果使用了该选项,链接器就不会 unmangle C+符号名了。符号名是按照它们在目标符号表中显示的格式显示的。 -via file 该选项表示从文件 file 中读取输入文件名列表和链接器选项。 在 armlink 命令行可以输入多个 -via 选项,当然, -via 选项也能够不含在一个 via 文件中。 -strict 这个选项告诉链接器报告可能导致错误而不是警告的条件。 -unresolved symbol 这个选项将未被解析的符号指向全局符号 symbol。 Symbol 必须是已定义的全局符号,否则
42、, symbol 会当作一个未解析的符号,链接将以失败告终。这个选项在自上而下的开发中尤为有用,在这种情况下,通过将无法指向相应函数的引用指向一个伪函数的方法,可以测试一个部分实现的系统。 该选项不会显示任何警告信息。 input-file-list 这是一个以空格作为间隔符 的目标或库的列表。 有一类特殊的目标文件,即 symdef 文件,也可以包含在文件列表中,为生成的映像文件提供全局的 symbol 值。 在输入文件列表中有两种使用库的方法。 1. 指定要从库中提取并作为目标文件添加到映像文件中的特定的成员。 2. 指定某库文件,链接器根据需要从其中提取成员。 armlink 按照以下的顺序处理输入文件列表: 1. 无条件的添加目标文件 2. 使用匹配模式从库中选择成员加载到映像文件中去。例如使用下面的命令: armlink main.o mylib(stdio.o) mylib(a*.o). 将会无条件的把 mylib库中所有的以字母 a开头的目标文件和 stdio.o在链接的时候链接到生成的映像文件中去。 3. 添加为解析尚未解析的引用的库到库文件列表。 8.1.2 ARM运行时库 本小节为读者介绍一下 ARM C/C+库方面的相关内容。 8.1.2.1 运行时库类型和建立选项 ADS 提供以下的运行时库来支持被编译的 C 和 C+代码:
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。