| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> gcc和arm-linux-gcc(使用) -> 正文阅读 |
|
[系统运维]gcc和arm-linux-gcc(使用) |
目录 1、gcc和arm-linux-gcc有何不同?
2、gcc组成结构:GCC 内部结构主要由 Binutils、gcc-core、Glibc 等软件包组成。 ? ? ? ? 1、Binutils:它是一组开发工具,包括连接器,汇编器和其他用于目标文件和档案的工具。关于 Binutils 的介绍可以参考 Binutils 简单介绍。这个软件包依赖于不同的目标机的平台。因为不同目标机的指令集是不一样的,比如 arm 跟 x86 就不一样。
????????编译命令为: gcc -o test test.c 编译生成 test 可执行文件。gcc 编译流程分为四个步骤:预处理、编译、汇编、链接。个人认为预处理和编译主要由 gcc-core 来完成,汇编和链接主要由 Binutils 来 完成。那么何时用到 glibc 呢?看到源码中的 printf 函数没有,这个函数在 GCC 中是以库函数的形式存在,这个库函数在 glibc 库中,在 stdio.h 头文件中被声明。 ? ? ? ? 如果要使用交叉工具链为 ARM 机器编译简单的 Hello World 程序,可以运行如下命令编译并测试这个代码: arm-linux-gcc -o hello hello.c。 3、gcc使用:示例代码
1、分步骤执行预编译过程 这个过程处理宏定义和include,去除注释,不会对语法进行检查。 可以看到预编译后,代码从6行扩展到了910行。
编译过程 这个阶段,检查语法,生成汇编代码。
汇编过程 这个阶段,生成目标代码。 此过程生成ELF格式的目标代码。
链接过程 链接过程。生成可执行代码。链接分为两种,一种是静态链接,另外一种是动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存。
程序运行:
2、直接执行gcc hello.c直接编译,生成一个a.out的文件 ?gcc -o hello hello.c?使用-O选项指定文件输出,规定输出的文件名是hello 4、arm-linux-gcc使用arm-linux-gcc?是交叉编译器,基本用法与?gcc?相同,目的是将编译的程序放在目标机(ARM)上运行。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/30 1:56:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |