第3章 Linux下应用程序开发基础 -47-
图3-3 选择用户交换界面 图3-4 工具检测
Kdevelop所使用的工具检测窗口单击“工具程序检测窗口”对话框中的【下一步】按钮,进行下一个步骤。下一个步骤为―寻找Qt文档‖,并设定文件路径,一般而言这个步骤应该会成功完成。Qt文档查找界面如图3-5所示。
图3-5 Qt文档查找 图3-6 安装过程成功完成窗口
单击“寻找Qt文档”对话框之中的【下一步】按钮,进入下一个步骤。下一个步骤为“寻找KDE程序库文件”,同样,一般而言这个步骤也应该会成功完成。再缺省完成两步以Kdevelop设置将显示“安装过程成功完成”的对话框,如图3-6所示,此为Kdevelop设置的最后步骤,单击【下一步】按钮,稍待一会Kdevelop便会启动。
3.2.3 创建一个新项目
-48- 嵌入式Linux系统开发与应用实验教程
在Kdevelop中开发C程序,需要用创建项目的方式进行。请执行“项目/新建”命令,打开应用程序向导对话框,创建过程如图3-7所示。
图3-7 创建新项目
选择要创建程序的种类,这里选择C程序,然后单击【后一页】按钮进行下一步骤。下一个步骤为关于项目信息的设定,如图3-8所示,在此输入项目的名称、目录、版本号码、作者姓名、以及作者电子邮件地址,后两项可以不填。可把“生成源文件和头文件”前的勾去掉,(如不去掉勾,系统会自动生成一些源代码),单击【创建】按钮,等屏幕出现“Ready”信息后,单击“退出”,项目便生成了。
图3-8 输入项目信息
第3章 Linux下应用程序开发基础 -49-
3.2.4 输入源程序
创建项目后,下边要输入源程序了,选择文件菜单中的“新建”命令,新建一个“C/C++程序”,如图3-9所示,或者在Kdevelop窗口的左边选择源程序,这时系统自动按照其选定的文件头摸板生成一个空文件,这时可开始输入程序,例如,输入如图3-10所示程序:
图3-9 新建C/C++文件
图3-10 输入源程序
-50- 嵌入式Linux系统开发与应用实验教程
3.2.5 项目的编译与执行
写好程序后,先在“建立”菜单中,点击“autoconf和automake(A)”,然后,执行“建立/编译”命令进行程序的编译,如果程序没有出错,经过一段时间的编译,将看到Kdevelop下方的信息框之中显示编译成功的信息,如上图所示。接着便可以执行应用程序了。选择“建立/执行”命令进行程序的连接,或者点击工具栏中的“执行”按钮,若没有发生问题,就会在另一个窗口中看到程序的执行结果,如上例终端中就会输出“ Hello world!”这句话,如图3-11所示。
图3-11 程序运行成功界面
3.3 交叉编译工具GNU GCC
3.3.1 GNU GCC简介
GUN 编译器集合(GCC)是一个“免费”的C/C++工具链,它有力地支持了Linux系统的发展,由于它被看作许多嵌入式处理器的一个交叉编译器,所以在嵌入式应用程序开发中是一个非常流行的交叉编译工具,它包括C/C++交叉编译器arm-elf-gcc、汇编器arm-elf-as、连接器arm-elf-ld、库管理器arm-elf-ar、工程管理器make、调试工具gdb和其他一些实用程序。它的基本功能包括如下几点:
1. 输出预处理后的C/C++源程序; 2. 输出C/C++源程序的汇编代码; 3. 输出二进制目标文件; 4. 生成静态库; 5. 生成可执行程序; 6. 转换文件格式。
第3章 Linux下应用程序开发基础 -51-
在这里我们还要理清Linux软件开发中的一些基本概念。
● 编辑器与编译器的概念:编辑器是输入程序代码的裁体。Linux提供了几款编辑器,如vi(VIM),还有KDevelop等。而编译器则是将源程序转换成机器可识别的二进制代码的工具。
● 交叉编译器的基本概念:交叉编译器本身是运行在host(宿主机)上,而交叉编译器所生成的代码则运行在target(目标机)上。
● Linux操作系统之上编程与操作系统之下编程的区别:在Linux操作系统之上编程,例如,有一个C语言写的源文件hello.c,要对它进行编译,可用gcc编译器,命令行如下:
# gcc –o hello.o hello.c
其中gcc是Linux编译器的名字,-o选项指定输出文件名。到这里,程序与嵌入式系统目标机没有任何关联,所以说这是在操作系统之上编程。
而在操作系统之下编程,一定要与目标机相关联,即所编的程序经过编译连接以后产生的可执行文件要下载到目标机上运行,这时所用的编译器应该是交叉编译器arm-elf-gcc,也可说是目标编译器。
北京博创公司的UP-NETARM3000实验平台使用μclinu的交叉编译器是arm-μclibc-gcc,它的命令格式、命令选项及命令的使用同arm-elf-gcc是一样的。μclibc是μclinux提供的经过裁减的操作系统的库,应用程序很大一部分是在和库函数打交道。在目标板使用操作系统的开发模式下,交叉编译环境中还需要对应该操作系统的库。开发应用程序可以先在宿主机上调通,然后用交叉编译器为目标板重新编译一遍,这样做是因为宿主机是Linux而目标板上跑的是μclinux,两个操作系统提供的应用程序接口几乎是一样的,所以程序几乎不用修改。
3.3.2 C/C++交叉编译器arm-elf-gcc
arm-elf-gcc是编译的前端程序,它通过调用其他程序来实现将程序源文件编译成目标文件。编译时它首先调用预处理程序(cpp)对输入的源程序进行处理,然后调用ccl将预处理后的程序编译成汇编代码,最后由arm-elf-gcc将汇编代码编译成目标代码。
arm-elf-gcc具有丰富的命令选项,控制编译的各个阶段,满足用户的各种编译需求。
1. 命令格式
arm-elf-gcc [options] file ?
在命令arm-elf-gcc后面可跟一个或多个选项,选项之间用空格隔开,然后跟一个或多个目标文件。
例如,将hello.c 编译成目标文件 hello.o并且生成调试信息:
arm-elf-gcc –g –c –o hello.o hello.c