Linux下应用程序开发基础 - 图文(4)

2019-01-19 17:15

第3章 Linux下应用程序开发基础 -57-

例如,链接的输入文件为ming.o,输出文件为ming.elf,将/lib添加到库的搜索路径,命令如下:

arm-elf-ld -L. /lib –o ming.elf ming.o

(5)设置输出文件的名字

-o output。用于将输出文件名字设定为output。如果不指定输出文件名,arm-elf-ld生成文件名默认为a.out。例如,链接的输入文件为ming.o,输出文件为ming.elf,命令如下:

arm-elf-ld –o ming.elf ming.o

4.linkcmds链接命令文件

arm-elf-ld的命令语言是一种描述性的脚本语言,它主要用于控制:有哪些输入文件、文件的格式怎样、输出文件中的模块怎样布局、分段的地址空间怎样分布等。

用命令语言写成的文件,通常称为linkcmds,它具有可重性,不必每次在命令行输入一大堆命令选项。并且对于不同的应用,只需对linkcmds进行简单的修改就可以使用。

(1)linkcmds的调用

首先写一个链接命令文件linkcmds,然后在arm-elf-ld的命令中使用-T linkcmds参数,就能在链接时自动调用linkcmds文件。

例如,链接的输入文件为ming.o,输出文件为ming.elf,链接定位文件为linkcmds,则命令如下:

arm-elf-ld –T linkcmds –o ming.elf ming.o

(2)linkcmds的编写

arm-elf-ld命令语言是一系列语句的集合,包括用简单的关键字设定选项、描述输入文件及其格式、命名输出文件。其中有两种语句对于链接过程起重要作用:SECTIONS语句和MEMORY语句。SECTIONS语句用于描述输出文件中的模块怎样布局,MEMORY语句描述目标机中可以用的存储单元。

在linkcmds中的表达式与C语言中的表达式类似,它们具有如下的特征: ● 表达式的值都是unsigned long 或者long类型; ● 常数都是整数;

● 支持C语言中的操作符; ● 可以引用或者定义全局变量; ● 可以使用内建的函数。

3.3.4 交叉汇编器arm-elf-as

-58- 嵌入式Linux系统开发与应用实验教程

arm-elf-as是GCC工具链中的汇编程序编译器,针对ARM处理器并产生ELF(Executable and Linking Format 执行时链接文件格式)格式的二进制代码。

arm-elf-as产生一个交叉参考表和一个标准的符号表,产生的代码和数据能够放在多个段中。

1.命令格式

arm-elf-as 命令格式如下: arm-elf-as [option?][asmfile ?]

在命令arm-elf-as后面跟一个或多个选项,以及该选项的子选项,选项间用空格隔开,然后跟汇编源文件名。例如,将ming.s编译成目标文件,并且设置头文件的搜索目录为C:\\ming\\include:

arm-elf-as -I//c/ming/include ming.s

2. 命令选项列表

命令选项列表如下:

-a[dhlns]: 显示arm-elf-as信息; -f:不进行预处理;

-I path:设置头文件搜索路径; -o:设定输出文件名; -v:显示版本信息; -W:不显示警告提示; -Z:不显示错误提示。

3.命令的使用

(1)生成目标文件

每次运行arm-elf-as只输出一个目标文件,默认状态下名字为a.out。可以通过-o选项输出文件名字。例如,编译ming.s输出目标文件ming.o:

arm-elf-as –o ming.o ming.s

(2)设置头文件搜索路径

-I path用于添加路径path到arm-elf-as的搜索路径,搜索include“file”指示的文件。-I可以被使用多次以添加多个目录,当前工作目录将最先被搜索,然后从左到右依次搜索-I指定的目录。例如,编译ming.s时指定两个搜索目录,当前目录和C:\\ming\\include:

arm-elf-as -I../ -I//c/ming/include ming.s

第3章 Linux下应用程序开发基础 -59-

(3)显示arm-elf-as信息内容

-a[dhlns]用于打开arm-elf-as信息显示。Dhlns为其子选项,分别表示如下: d:不显示调试信息; h:显示源码信息; I:显示汇编列表; n:不进行格式处理; s:显示符号列表。

在不添加子选项时,-a表示显示源码信息,显示汇编列表,显示符号列表。添加子选项时将选项直接加在-a以后可以添加一个或多个。默认状态时显示的信息输出到屏幕,也可用重定向输出到文件。例如,编译ming.s生成不进行格式处理的汇编列表,输出到文件a.txt:

arm-elf-as -aln –o ming.o ming.s>a.txt

(4)设置目标文件名字

-o filename用于控制每次运行arm-elf-as只输出一个目标文件,默认输出文件为a.out。可以通过-o选项指定输出文件名字,通常都以.o为后缀。如果指定输出文件的名字和现有某个文件重名,生成的文件将直接覆盖已有的文件。例如,编译ming.s输出目标文件ming.o:

arm-elf-as -I/include –o ming.o ming.s

(5)如何取消警告信息

-W用于控制运行arm-elf-as不输出警告信息。例如,编译ming.s输出目标文件ming.o,不输出警告信息:

arm-elf-as -W –o ming.o ming.s

(6)设置是否进行预处理

arm-elf-as内部的预处理程序,完成以下工作:调整并删除多余空格,删除注释,将字符常量该成对应的数值。

arm-elf-as不执行arm-elf-gcc预处理程序能完成的部分,如宏预处理和包含文件预处理。可以通过.include“file”对指定文件进行预处理。arm-elf-gcc可以对后缀为.s汇编出现进行其他形式的预处理。

如果源文件第一行是# NO_APP或者编译时使用选项-f将不进行预处理。如果要保留空格或注释,可以在需要保留部分开始加入# APP,结束的地方加 # NO_APP。

例如,编译ming.s输出目标文件ming.o,并且编译时不进行预处理,则命令如下: arm-elf-as -f -o ming.o ming.s

3.3.5 自动化管理工具GNU Make

GNU Make 是Linux专门为软件开发提供的一个用来控制软件构建过程的自动化管理工具。在大型的开发项目中,通常有几十到上百个的源文件,如果每次均手工键入 gcc 命令进

-60- 嵌入式Linux系统开发与应用实验教程

行编译的话,则会非常不方便。因此,人们通常利用 make 工具来自动完成编译工作。

make 工具通过一个称为 Makefile 的文件来完成并自动维护编译工作。Makefile 需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系。当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件。如果 Makefile 文件存在,每次修改完源程序后,用户通常所需要做的事情就是在命令行键入“make”,然后所有的事情都由make来完成。

1.命令格式

make [-f Makefile][option][targer] ?

make命令后跟-f选项,指定Makefile 的名字为 Makefile;option表示make的一些选项;target是make 指定的目标。例如,Makefile的名字是my_hello_make:

make –f my_hello_make

2. 命令选项列表

命令选项列表如下:

-f FILE: 以指定的 FILE 文件作为 Makefile; -e:使环境变量优先于 Makefile的变量; -I dir:设定搜索目录; -i:忽略所有的命令执行错误;

-n: 只打印要执行的命令,但不执行这些命令; -p:显示 make 变量数据库和隐含规则;

-w: 在处理 Makefile 之前和之后,显示工作目录; -s:在执行命令时不显示命令; -r:使隐含规则无效; -h:显示所有的 make 选项;

-C dir: 读取 Makefile 设置的工作目录 。

3.命令使用

Makefile 文件用来告诉make需要做的事情,通常指怎样编译、怎样链接一个程序。以C语言程序为例,在用make重新编译的时候,如果一个头文件已被修改,则包含这个头文件的所有C源代码文件都必须被重新编译。而每个目标文件都与C的源代码文件有关,如果有源代码文件被修改过,则所有目标文件都必须被重新链接生成最后的结果。

(1) 指定Makefile

第3章 Linux下应用程序开发基础 -61-

-f Makefile 。用该选项指定Makefile 的名字为Makefile 。如果make中多次使用-f指定多个Makefile ,则所有Makefile 将链接起来作为最后的Makefile 。如果不指定Makefile ,make默认的Makefile 依次为“Makefile ”、“Makefile”。例如:

make -f my_hello_make

(2)使环境变量优先于Makefile 文件中的变量 -e 。使环境变量优先于Makefile 文件中的变量。例如: make -e

(3)指定包含文件的搜索路径

-I dir。指定在解析Makefile文件中的.include时的搜索路径为dir。如果有多个路径,将按输入顺序依次查找。例如:

make -I/include/mk

(4)忽略错误

-I 。忽略make执行过程中的所有错误。例如: make -i

(5)显示命令的执行过程

-n。只显示命令的执行过程而不真正执行。例如: make –n

(6)使隐含规则无效

-r。使make的隐含规则无效,清除后缀名规则中默认的后缀清单。例如: make –r

(7)显示执行过程中的工作目录

-w。显示make执行过程中的工作目录。例如: make -w

(8)读取Makefile文件前设置工作目录

-C dir。在读取Makefile文件以前将工作目录改变为 dir,完成 make后改回原来的目录。如果在一次 make中使用多个-C选项,每个选项都和前面一个有关系。“-C dir0 / -C dir1”与“-C dir0 /dir1”等价。例如:

make -C bsp

(9)不显示所执行的命令

-s。运行make时用–s可以不显示执行的命令,只显示生成的结果文件。例如:


Linux下应用程序开发基础 - 图文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:父亲的习惯更容易影响宝宝成长

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: