| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux系统下的gcc操作 -> 正文阅读 |
|
[系统运维]Linux系统下的gcc操作 |
目录 ???? 合三为一 ?完整演示 ?一、一次性编译在Linux上编译.c文件并非直接生成.out文件(Windows上为.exe),中间还经历了预处理、编译、汇编、链接四个过程,好在gcc提供了生成中间文件的指令。 1、新建、编辑源文件
终端操作如下: gedit命令后将会出现一个面板,我们输入程序: 保存文件后就完成了源代码的编辑工作。 2、生成可执行程序最简单的生成可执行文件的写法为:
这时打开“测试”目录,会看到多了一个名为 a.out 的文件,这就是最终生成的可执行文件,这样就一次性完成了编译和链接的全部过程:
如果不想使用默认的文件名,可以通过-o来自定义文件名:
这样生成的可执行程序的名字就是hello.out: 因为Linux下可执行文件的后缀仅仅是一种形式上的,所以可执行文件也可以不带后缀,例如:
这样生成的可执行程序的名字就是hello: 通过-o也可以将可执行文件输出到其他目录,并不一定非得在当前目录下:
上面的指令表示:将可执行文件输出到当前目录下的子目录ccc中,并命名为hello.out(ccc目录必须存在) 3、运行可执行程序
./表示当前目录,整条命令的意思是运行当前目录下的 a.out 程序 注意:如果不写./,Linux会到系统路径下查找 a.out,而系统路径下不存在这个程序,所以会运行失败 运行结果: 4、完整演示
二、分两步编译1、编译(Compile)-c将源文件(.c)编译成目标文件(.o)
就将 hello.c 编译为 hello.o。打开"测试"目录,就会看到它: 如果希望自定义目标文件的名字,那么可以使用-o选项,例如:
2、链接(Link)在gcc命令后紧跟目标文件的名字,就可以将目标文件(.o)链接成可执行文件(.out):
就将hello.o 链接为 a.out,打开目录就会看到 a.out。 使用-o选项仍然能自定义可执行文件的名字:
这样生成的可执行文件的名字就是 HELLO.out 3、完整演示
三、分四步编译1、预处理(.i)这个阶段输入.c源文件,主要处理文件中的带“#”的语句,将要包含(include)的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,最后将这些代码输出到一个“.i”文件中等待进一步处理:
2、编译(.s)这个阶段输入第一阶段生成的 .i 文件,输出成汇编语言 .s 文件:
3、汇编(.o)这个阶段输入第二阶段的汇编文件 .s 文件,然后编译成机器语言 .o 文件,在Linux系统上一般表现为ELF目标文件(OBJ文件):
合三为一以上三个阶段可以合为一:gcc –c hello.c –o hello.o(即上面的两步编译) 4、链接(.out)这个阶段输入第三步输出的机器文件 .o? ,将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接起来,最终生成可以在特定平台运行的可执行程序:
完整演示 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/15 23:43:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |