嵌入式C语言编译器

目录

1、GCC与gcc有什么不同?

2、什么是交叉编译?

3、编译、链接过程简介

4、如何理解"多语言混合开发"

5、gcc关键编译选项


1、GCC与gcc有什么不同?

GCC(GNU Compiler Collection)

     - GNU编译器集合,包含众多语言的编译器(C,C++,Java,D,Objective-C,etc.)

gcc

     - 特指GCC中的C语言编译器

GCC VS 嵌入式

     - 多数嵌入式操作系统都基于GCC进行源码编译

            Linux,VxWorks,Android,etc.

实际开发中的使用

     - 内核开发:gcc

     - 应用开发:gcc/g++/gdc

2、什么是交叉编译?

背景

     - 嵌入式设备往往资源受限

     - 不可能在嵌入式上直接对处理器进行编程

解决方案

     - 在开发主机(PC)上对源码进行编译

     - 最终生成目标主机(嵌入式设备)的可执行程序

gcc是如何进行交叉编译的?

     - 配置目标主机的编译工具链(如:arm-linux)

     - 配置工具链的具体版本

          ★ 根据具体的目标代码选择相应的工具链版本

          ★ 正确使用关于硬件体系结构的特殊编译选项

案例:大型企业嵌入式开发环境

嵌入式C语言编译器_第1张图片

3、编译、链接过程简介

编译、链接过程简介

4、如何理解"多语言混合开发"

多语言混合开发方式一

嵌入式C语言编译器_第2张图片

行业案例:.net framework

嵌入式C语言编译器_第3张图片

 

多语言混合开发方式二

嵌入式C语言编译器_第4张图片

行业案例:QQ

嵌入式C语言编译器_第5张图片

多语言混合开发方式三

嵌入式C语言编译器_第6张图片

行业案例:Eclipse

嵌入式C语言编译器_第7张图片

5、gcc关键编译选项

gcc关键编译选项一

     - 预处理指令 gcc -E file.c -o file.i

     - 编译指令 gcc -S file.i -o file.s

     - 汇编指令 gcc -c file.s -o file.o

gcc关键编译选项二

     - 生成映射文件 gcc -Wl,-Map=test.map file.c

     - 宏定义 gcc -D'TEST="test"' file.c

     - 获取系统头文件路径 gcc -v file.c

//func.h
#include 

void func()
{
#ifdef TEST
    printf("TEST = %s\n", TEST);
#endif

    return;
}
//test.c
#include 
#include "func.h"

int g_global = 0;
int g_test = 1;

int main(int argc, char *argv[])
{
    func();
    
    printf("&g_global = %p\n", &g_global);
    printf("&g_test = %p\n", &g_test);
    printf("&func = %p\n", &func);
    printf("&main = %p\n", &main);
	
    return 0;
}

嵌入式C语言编译器_第8张图片

嵌入式C语言编译器_第9张图片

嵌入式C语言编译器_第10张图片

gcc关键编译选项三

     - 生成依赖关系

          ★ 获取目标的完整依赖关系 gcc -M test.c

          ★ 获取目标的部分依赖关系 gcc -MM test.c

嵌入式C语言编译器_第11张图片

gcc关键编译选项四

     - 指定库文件及库文件搜索路径

          ★ -L 选项:指定库文件的搜索路径

          ★ -l 选项:指定库文件

                    gcc test.c -L. -lfunc

     - 指定头文件路径 gcc  -Idir test.c

//func.c
#include 

void func()
{
#ifdef TEST
    printf("TEST = %s\n", TEST);
#endif

    return;
}
//test.c
#include 

int g_global = 0;
int g_test = 1;

int main(int argc, char *argv[])
{
    func();
    
    printf("&g_global = %p\n", &g_global);
    printf("&g_test = %p\n", &g_test);
    printf("&func = %p\n", &func);
    printf("&main = %p\n", &main);
	
    return 0;
}

嵌入式C语言编译器_第12张图片

 

你可能感兴趣的:(工具篇【笔记】)