【答疑解惑第九讲】如何在linux下面编译一个简单的c语言程序

存在问题:

习惯了用IDE,习惯了点击执行按钮。在linux就不能这样了,该咋办?

解决方案:

随着android的大热,在linux下搞开发的人也越来越多,好多人问linux下如何编译一个简单的c语言程序,例如下面的小伙伴:

例如上面的同学,很明显,命令写错了,正确的应该为:

gcc -o hello hello.c 目标和源文件写反了。

这当然是最简单的程序了,只有一个源码文件,在linux下编译源文件一般需要自己编写makefile,那有些人就说了,linux真麻烦,还要编写makefile,windows下就不用,其实编译都需要makefile,只是windows下IDE工具帮你做了而已。其实linux下也能实现自动生成makefile,不用手写,但是需要一些工具例如automake等工具的协助而已。

下面简单介绍下linux编译程序的过程:

使用gcc编译程序是,其过程主要分为四个阶段:预处理,编译,汇编,连接

程序清单:

1 #include<stdio.h> 2 #include<stdlib.h> 3 int main(int argc,char** argv) 4 { 5 printf("Hello Linux ,i am coming---------------\n"); 6 return 0; 7 }

1.预处理(cpp):生成 *.i 的预处理文件,该过程只激活预处理,不生成文件,所以需要重定向一个输出文件

使用指令 -E,如gcc -E main.c -o main.i 或

        cpp main.c -o main.i

2.编译(ccl):生成 *.s 文件,该过程只激活预处理和编译, 关联文件可以是*.i 或 *.c

使用指令 -S ,如 gcc -S main.c -o main.s 或

         gcc -S main.i -o main.s 或

         ccl -S main.c -o main.s

3.汇编(as):生成 *.o 文件,该指令只激活预处理、编译和汇编, 关联文件可以是 *.c 、*.i 、*.s 三者之一

使用指令 -O ,如 gcc -c main.c -o main.o 或

         gcc -c main.i -o main.o 或

         gcc -c main.s -o main.o 或

         as main.c -o main.o

4.连接(ld):生成可执行文件,相关联文件可以是 *.c 、*.i 、*.s 、*.o之一

gcc main.c -o main 或

gcc main.i -o main 或

gcc main.s -o main 或

gcc main.o -o main 或

ld main.c -o main

当一个项目中包含两个或两个以上的C文件时,这种编译方法就显得力不从心了,这时就要用到makefile了

为了结合上面的gcc指令,我写了如下的makefile文件

1 main:main.o 2 gcc main.o -o main 3 main.o:main.s 4 gcc -c main.s -o main.o 5 main.s:main.i 6 gcc -S main.i -o main.s 7 main.i:main.c 8 gcc -E main.c -o main.i

指导意见:

linux上面编写C语言程序,没有像在windows下面这么多的工具可以用,但是在linux采用比较原始点的方法去编译程序,在一定程度上的确可以锻炼思维水平,初期学习阶段用太智能的编译工具,对于基本功的学习反而不是什么好事。如果有机会在linux搞,还是建议玩一把。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-11-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据之美

根据ip查找ISP运营商和归属地的几种方法

一般来说都是根据网上流传的各种IP库来解析获取对应的ISP和归属地的, 除非有实力的公司自己从运营商获取数据,然后做数据分析得到。 下面介绍前者,如何...

2.4K10
来自专栏知晓程序

开发 | 只需一步!教你如何轻松部署小程序后端

利用它,你可以在「微信 web 开发者工具」中,直接完成后端代码编写、腾讯云部署等一系列操作。

6724
来自专栏架构师小秘圈

大型网站图片服务器架构的演进

作者:丁浪,非著名架构师。关注高并发、高可用的架构设计,对系统服务化、分库分表、性能调优等方面有深入研究和丰富实践经验。热衷于技术研究和分享。 声明:版权归丁浪...

8294
来自专栏机器学习实践二三事

Mac无法升级six, numpy等

OS 10.10以上,会出现你无法直接使用pip升级向six, numpy等,报错就是各种权限不够,加上sudo结果也一样,原因就是MacOS的系统完整性保护(...

3058
来自专栏开源优测

AutoLink开源平台源码组织结构

AutoLink是一个基于Python + Flask + RobotFramework开发的web IDE模式的自动化测试开源平台。

1563
来自专栏walterlv - 吕毅的博客

VS 编译太慢了吗?新建解决方案配置关闭一部分项目的编译

2018-04-02 23:59

2031
来自专栏渠道合作伙伴技术圈

基于腾讯云COS对象存储的文件存储网关部署 单目录挂载1PB!

另外设置两块硬盘时记住,元数据存储盘比缓存盘大1.5倍(该处一次性设置不可更改的)

75710
来自专栏依乐祝

.NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程

接下来我们就正式进入.NET Core实战项目之CMS的设计篇了。在设计篇呢,我们需要对数据库进行设计,而数据库的设计又分为功能部分设计以及用户权限部分设计。作...

1112
来自专栏Timhbw博客

自用图片压缩工具推荐(优化博客加载速度)

2016-03-2318:22:27 发表评论 609℃热度 之前wordpress写博客时文章里面的图片都是上传到服务器中,以前以为这样省事,都是原图上传,...

47512
来自专栏架构师之路

究竟啥才是互联网架构“高可用”

一、什么是高可用 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。 ...

4836

扫码关注云+社区

领取腾讯云代金券