嵌入式静态库/动态库制作以及 Makefile使用,Makefile书写规则和交叉工具链

一. 交叉工具链大纲
    1. 什么是交叉工具链?什么是交叉编译?
    2. 安装交叉工具链方法,结合环境变量PATH,工具链选项
    3. Makefile使用,Makefile书写规则
    4. 嵌入式静态库/动态库制作,库是如何使用?

二. 什么是交叉工具链?什么是交叉编译?
1. 回顾编译过程
                 编译
    高级语言(xxxx.c)    ------>   目标程序(xxxx)

编译器:GCC
编译过程: 预处理,编译,汇编,链接

gec@ubuntu:~$ which gcc   --> gcc编译器本身也是一个linux命令
/usr/bin/gcc

gec@ubuntu:~$ man 1 gcc  --> 查询gcc编译器选项以及参数用法

GCC编译器特点: 在主机A编译,在主机A运行   -->  GCC编译器也叫本地编译器。
          Ubuntu      Ubuntu

2. 什么是交叉编译?
    无论是本地编译,还是交叉编译,都是属于把高级语言变成目标程序过程!

所谓交叉编译:  在主机A编译,在主机B运行   -->  对应的编译器就是交叉编译器,也叫交叉工具链。
          Ubuntu      开发板

3. 什么是交叉工具链?
    一个纯净版linux系统没有交叉工具链,需要用户自己进行配置。
    交叉工具链原材料: arm-2009q3.tar.bz2

三. 如何配置交叉工具链?

1. 先把下载好的工具链存放在linux共享目录下
2. 切换到共享目录下
3. 创建一个交叉工具链安装包
    sudo mkdir /usr/arm    ---> 起始权限受到超级用户umask的影响
    sudo chmod 777 /usr/arm
4. 直接把工具链对应的安装包解压到安装路径下就可以
    tar jxvf arm-2009q3.tar.bz2 -C /usr/arm

结果:工具链路径在/usr/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc   

例子:交叉编译helloworld程序

本地编译命令: gcc umask.c -o umask
结果:
file umask:
umask: ELF 32-bit LSB executable, Intel 80386    --> 该程序的运行平台
               , version 1 (SYSV),

交叉编译命令: /usr/arm/arm-2009q3/bin/arm-none-linux-gnueabi-gcc umask.c -o umask
    
结果:
file umask:
umask: ELF 32-bit LSB executable, ARM  --> 该程序的运行平台
           , version 1 (SYSV),


    结论: 可执行程序的运行平台由谁来决定?  --> 由编译器决定。


   练习1: 写一个helloworld程序,交叉编译它!
   练习2: 为工具链取新的名字 "arm-linux-gcc"
        sudo ln -s arm-none-linux-gnueabi-gcc arm-linux-gcc
        alias arm-linux-gcc='arm-none-linux-gnueabi-gcc'

   练习3: 在任何的路径下都可以随时使用交叉工具链"arm-linux-gcc"
        思路:谁想在任何的路径下都可以使用,办法就是把谁所在的目录加入到PATH中
            arm-linux-gcc             /usr/arm/arm-2009q3/bin  

        临时修改:export PATH=$PATH:/usr/arm/arm-2009q3/bin 
        永久修改:~/.bashrc

四. 工具链版本号/位数/参数选项

1. 查看工具链版本号
gec@u

你可能感兴趣的:(Linux,交叉工具链,交叉编译,Makefile使用,嵌入式静态库/动态库制作)