文档库 最新最全的文档下载
当前位置:文档库 › 5、交叉编译工具的使用与环境变量的添加方法

5、交叉编译工具的使用与环境变量的添加方法

1、arm-linux-gcc交叉编译器的使用
A、使用arm-linux-gcc来编译我们的程序,在/home/liudeguo目录下新建一个main.c的文本文件并在main.c文件中输入一段程序用vi命令,其实是用了vi编辑器打开来实现的,当用vi编辑器打开main.c文件时,如果liudeguo目录下有main.c文件则直接打开main.c文件,如果liudeguo目录下没有main.c文件则新建一个main.c文件,此时新建的main.c文件在Linux系统的内存中,还没有被保存到liudeguo目录下,所以需要在vi编辑器的末行命令模式中用:wq命令来保存退出即来保存刚刚新建的main.c文件,具体操作信息如下
[root@localhost liudeguo]# vi main.c
输入上述命令后此时main.c文件就被打开了,且其中没有任何内容,如果需要对本文本进行编辑则按i或a进入插入模式进行编辑,如果需要保存此文本则按ESC键进入末行命令模式,输入:wq命令来保存退出,下面用ls命令来查看liudeugo目录下是否有main.c文件,如果有则说明创建成功
[root@localhost liudeguo]# ls
在main.c文本中输入如下C语言程序,使用i键来进入vi编辑器的插入模式,即让main.c程序在终端下输出一句hello world!信息

#include

void main()
{
printf("hello world!\n");
}
输入完上述五行语句后,按ESC键进入vi编辑器的末行命令模式,按:wq保存退出


B、对上述的main.c文件用arm-linux-gcc编译器来进行编译
① 具体用法同gcc的用法,操作命令如下
[root@localhost liudeguo]# arm-linux-gcc main.c -o main
输入上述命令后会出现如下系统提示,说找不到arm-linux-gcc这个命令,那么如何执行这个命令呢,我们知道可执行的命令都是放在bin、sbin或者/usr/bin这些目录下的,那么如果我要把arm-linux-gcc这个命令也放到bin、sbin和/usr/bin这些目录下,那么系统就可以执行了,但是这种方法是非常笨的,如果我想要执行很多的命令则就需要将/usr/local/arm/4.3.2的/bin目录下的很多个命令拷贝到Linux系统的bin、sbin和/usr/bin目录下,这是非常麻烦的,下面我们可以使用添加环境变量的方法来解决此文件
bash: arm-linux-gcc: command not found


②针对arm-linux-gcc交叉编译器在Linux系统下添加环境变量
我现在有一种比较好的方法,就是添加环境变量,在/etc/profile这个文件中正确的位置增加如下语句,首先我们用vi打开这个文件,对本文本进行编辑则按i或a进入插入模式进行编辑,如果需要保存此文本则按ESC键进入末行命令模式,输入:wq命令来保存退出,具体操作如下
[root@localhost liudeguo]# vi /etc/profile
输入上述命令打开profile文件后在下面一行的下面添加环境变量语句
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
增加下面的语句,export后面指定PATH这个变量为我们arm-linux-g

cc交叉编译器的路径,增加的这句话的意思就是告诉操作系统可以到/usr/local/arm/4.3.2/bin这个文件夹下来查找可执行文件arm-linux-gcc交叉编译器文件,然后按ESC键进入末行命令模式,输入:wq命令来保存退出
export PATH=/usr/local/arm/4.3.2/bin:$PATH
下面再执行一次编译命令,操作命令如下
[root@localhost liudeguo]# arm-linux-gcc main.c -o main
输入上述命令后,会出现下面和上述同样的系统提示,说找不到arm-linux-gcc这个命令,说明刚才添加的环境变量没有成功
bash: arm-linux-gcc: command not found
那我们需要再执行一个命令,让/etc/profile这个文件生效,输入如下命令
[root@localhost liudeguo]# source /etc/profile
这样就会使刚才修改的/etc/profile文件起作用,然后再执行一次编译操作,命令如下
[root@localhost liudeguo]# arm-linux-gcc main.c -o main
经过上述命令操作以后发现已经可以交叉编译了,但是会出现下面两行提示信息
main.c: In function 'main';
main.c:4: warning: return type of 'main' is not 'int'
一条是指main.c文件中有一个主函数main,另一条是指main.c文件中main主函数返回值类型不是int整型,这些无关我们用arm-linux-gcc来对main.c文件进行编译,这里略过,再用ls命令查看liudeguo目录发现已经生成了以main为名称的可执行文件
[root@localhost liudeguo]# ls
下面我们执行main可执行文件,执行的命令符是./,执行命令符./后面紧跟执行文件的名称main,用如下命令实现
[root@localhost liudeguo]# ./main
输入上述命令信息后会出现如下系统提示信息,说main文件是不能运行的,其实这个main文件是在ARM(S3C2440)体系结构Linux操作系统下运行的,它不可以运行在当前的操作系统下,下面我们来编写一个Makefile文件,让它自动来编译我们已经写好的main.c文件
bash: ./main: cannot execute binary file


③创建并编写Makefile文件(Makefile可以写成makefile)
用vi命令来创建Makefile文件,其实是用了vi编辑器打开来实现的,当用vi编辑器打开Makefile文件时,如果liudeguo目录下有Makefile文件则直接打开Makefile文件,如果liudeguo目录下没有Makefile文件则新建一个Makefile文件,此时新建的Makefile文件在Linux系统的内存中,还没有被保存到liudeguo目录下,所以需要在vi编辑器的末行命令模式中用:wq命令来保存退出即来保存刚刚新建的Makefile文件,具体操作信息如下
[root@localhost liudeguo]# vi Makefile
输入上述命令后此时Makefile文件就被打开了,且其中没有任何内容,如果需要对本文本进行编辑则按i或a进入插入模式进行编辑,如果需要保存此文本则按ESC键进入末行命令模式,输入:wq命令来保存退出,下面用ls命令来查看liudeugo目录下是否有Makefile文件,如果有则说明创建成


[root@localhost liudeguo]# ls
在Makefile文本中输入如下C语言程序,使用i键来进入vi编辑器的插入模式,输入的程序目的是让Makefile程序自动对mian.c文件进行编译
main:main.c
arm-linux-gcc -o main main.c
main:main.c语句中的main名称是指我们编译输出的可执行文件名称,此main可执行文件的生成依赖于main.c文件,这两个文件之间用:来隔开
arm-linux-gcc -o main main.c语句中的arm-linux-gcc是指用arm-linux-gcc交叉编译器对main.c文件进行编译,在编译时指定输出可执行文件的名称,用选项-o来实现,-o后面紧跟要输出可执行文件的名称main,输出文件的名称后面紧跟要被编译的文件名称(带扩展名.c)main.c
上述语句输入完成后按ESC键进入vi编辑器的末行命令模式,按:wq保存退出
注意:在输入arm-linux-gcc -o main main.c语句之前要用Tab按键进行空格输入,否则在用make对Makefile进行编译时会出现如下提示,指示缺少分隔,编译停止
Makefile:2: *** missing separator. Stop.
用make工具对Makefile文件进行编译
对上述步骤创建和编写的Makefile文件用make进行编译,具体编译操作如下
[root@localhost liudeguo]# make
输入上述make命令后,如果liudeguo文件夹下有main文件则会出现如下提示,指示main文件是最新的,即将用make工具编译后的main文件覆盖之前的main文件
make: 'main' is up to date.
如果我们将之前的main文件用rm命令进行删除,重新用make对Makefile进行编译,这时就会输出如下信息
arm-linux-gcc -o main main.c
main.c: In function 'main';
main.c:4: warning: return type of 'main' is not 'int'
arm-linux-gcc -o main main.c语句在上面已经介绍了,这里就不讲了,其它两条中的一条是指main.c文件中有一个主函数main,另一条是指main.c文件中main主函数返回值类型不是int整型,这些无关我们用make来对Makefile文件进行编译,这里略过,再用ls命令查看liudeguo目录下是否有以main为名称的可执行文件,如果有则说明我们刚刚用make工具对Makefile文件编译成功,查看ls命令操作如下
[root@localhost liudeguo]# ls
main main.c Makefile
当Makefile文件被make工具编译成功后,我们就可以执行main文件了,具体执行main的命令符是./,执行命令符./后面紧跟执行文件的名称main,具体执行操作信息如下
[root@localhost liudeguo]# ./main
输入上述命令信息后会出现如下系统提示信息,说main文件是不能运行的,其实这个main文件是在ARM(S3C2440)体系结构Linux操作系统下运行的,它不可以运行在当前的操作系统下,这个和上面手动操作arm-linux-gcc交叉编译器编译的结果是一样的
bash: ./main: cannot execute binary file

相关文档
相关文档 最新文档