linux中gcc的使用-----基础篇

简介

  还记得大家写下人生中的第一行代码,运行自己的第一个程序时候的场景吗。打开你的IDE,然后写上代码,保存,点击编译,点击运行,然后你的桌面上就产生了一个丑陋的小黑框,当时的你是不是觉得那很神奇,其实干完这些,对于你来说是不飞吹灰之力的。
  可是现在只给你一个linux下的模拟终端,请问怎么编写出一个hello world这样的程序,似乎还是比较难的,因为再也没有了Windows环境下的那种一点就出结果的快感了,其实笔者要指出的是,正是Windows环境下的这种特点,导致很多初学编程的人不了解其中的一些细节。
  还是先说一下gcc吧,gcc是什么呢,gcc其实是GNU推出的一款编译器,最开始是针对C语言的,但是目前gcc支持了很多其他的语言,比如说C++和java等。对于初学者,可能还是不能理解什么是编译器,大家想一想一个问题。你写的代码是你能看懂的,但是凭什么计算机也可以看懂呢?这就好比两个使用不同语言的国家的人交流一样,请问他们怎么进行交流。很聪明,你一定想到了,通过翻译官,那么我想说的是编译器实际上也是充当这么一个角色,当然他的功能远远不止这些了。

不得不讲的编译

  在Windows环境下编程,很多人习惯上的认为编译就是点击一个按钮就完成了,事实上并不是这样,我们可以如此快捷的使用是因为计算机帮我们做了许多的东西,编译也并不是一步完成的。他大致可以分为一下四步:
1.预编译阶段
  不知道初学者是否问过没有,为什么使用printf函数就可以把信息输出到屏幕?很简单因为他是一个函数,而且是一个别人已经写好的函数,可是别人写好的函数我们怎么可以使用呢?还记得你在行首写下的include指令吗,这个指令就是告诉自己的程序,我使用了一个别人写好的函数,这个函数在XXXX文件里。而预编译的过程实际上就是把这个文件展开,这样你的printf就可以用了,同样define命令是如此,简单的来说,预编译并不是编译,所以叫预编译嘛。预编译对原来的程序进行一定的修饰,为编译阶段做准备
2.编译阶段
  熟悉计算机发展史的人知道,计算机语言是从最开始的01机器语言,演变到汇编语言,然后才到现在的高级语言的,随着发展,计算机语言与人的关系是越来越近了,可是离计算机却越来越远了,为了让计算机可以可理解我们使用的高级语言,就必须实现这么一个逆过程,让高级语言向低级转换,编译阶段就是完成这么一件事,他把我们预编译好的代码转换成汇编语言,至于这汇编语言长啥样,自己cat查看一下吧
3.汇编阶段
  接着上面所述,计算机是无法看懂汇编语言的,于是还要做进一步的转换,将汇编代码转换成机器代码
4.链接阶段
  好了,现在计算机似乎可以看懂我们写的代码了,但是别急,虽然计算机可以看懂我能的代码,但是你没有发现我们的程序一下子用来这个库的函数,一下子用了那个库的函数,生成的代码并不是一个整体。这一步的目的就是把各个独立的文件链接起来没事他们可以相互配合完成制定的功能。

  说了这么多,你是否明白了什么呢,接下来看看我们的gcc是怎么完成这些的,这就不得不介绍几个命令了
简单粗暴的
gcc test.c
  这样可以一步到位,生成一个可执行文件a.out,如果已经存在则会进行覆盖,是不是觉得a.out太死板,没点个性呢,每次我最开始也是这么认为的。
gcc -o gexing test.c
  使用-o参数,然后后面可以跟还是那个你要知道的生成的文件名,这回有个性了吧。记住这个参数-o只要你要制定名称,在后续的命令中都可以使用
gcc -o test.i -E test.c
  它执行的是预编译阶段,生成文件test.i
gcc -o test.s -S test.i
  它执行的是编译阶段,会生成汇编文件test.s
gcc -o test.o -C test.i
  执行汇编阶段,生成test.o文件
天哪,又是要记参数,最头痛了,别急,从上到下看一下这三个参数,再看看你的键盘做上角是不是有个键呢,这下记住了吧,哈哈哈

最后一部就是链接了
gcc -o test test.o
  简单吧,他会生成一个名为test的可执行文件,这个文件就是我们的目标文件哦。

  看到这里可能有人要开始骂了,我明明可以一步完成为什么要完成这么多步呢,但是你有没有注意到,每个阶段都生成了不同的文件,记住,这些文件以后会是很有用的,这就是linux比Windows好的地方,编写一个hello world,你是不是发现你真的学到了很多东西,因为系统没有可以去隐藏这些东西,一切都有你自己手动实现。
  掌握了这几个参数,就可以开始在linux中写写代码了,但是还是需要学习很多东西,这样说linux对程序员的好处,他真的要学的东西太多了,基础篇就到这里了,至于提高篇嘛,等我学会了,理解了再说吧。


来自长沙理工的2017级大一学生一名,有热爱学习的同学们可以联系我哦807920489(qq),女士优先,哈哈哈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章