centos和ubuntuLinuxGCC简明教程(使⽤GCC编写C语⾔程序)
市⾯上常见的 Linux 都是发⾏版本,典型的 Linux 发⾏版包含了 Linux 内核、桌⾯环境(例如 GNOME、KDE、Unity 等)和各种常⽤的必备⼯具(例如 Shell、、VIM、Firefox 等),国内使⽤较多的是 CentOS、Ubuntu(乌班图)、Debian、Redhat 等。
Linux 主要应⽤于各种服务器(例如⽹站服务器、数据库服务器、DNS服务器、邮件服务器、路由器、负载均衡集等),⽽不是我们常见的个⼈电脑。Linux 是服务器操作系统的绝对霸主,占据了 80% 以上的份额,在未来的服务器领域,Linux 是⼤势所趋。
这其中,⼜以 CentOS 和 Ubuntu 为主,CentOS 占有压倒性的优势。服务器操作系统 80% 以上的市场份额被 Linux 占据,⽽ Linux 80% 以上的份额⼜被 CentOS 占据。本教程以 CentOS 为例来讲述如何编译C程序。
服务器上的 Linux 是不安装图形界⾯的,只能在控制台模式下使⽤,以尽量节省服务器资源。⽽我们在学习过程中使⽤的 Linux 是带图形界⾯的,以满⾜初学者的需求,降低学习成本。
在 Linux 下我们仍然可以使⽤带界⾯的、傻⽠式的 IDE,例如 CodeLite、CLion(收费)、Code::Blocks、Netbeans、Eclipse CDT 等。微软的 Visual Studio 也⽀持 Linux 了,在 Windows 下⽤惯了 Visual Studio 的⽤户也可以毫⽆障碍地迁移到 Linux 平台。
但是作为初学者,我建议⼤家在命令⾏模式下编译C语⾔程序,这样能够了解⽣成⼀个可执⾏程序的详细步骤,以及编译命令的各种设置选项,为以后的 Linux C/ 开发打好坚实的基础。
Gedit 编辑器
在 Linux 下,很多程序员都推崇使⽤ Vim、Emacs 等命令⾏模式的编辑器,它们功能强⼤,逼格够⾼,不管有没有桌⾯环境都能使⽤,是Linux C/C++ 程序员必备的神器。但是 Vim 和 Emacs 并不容易上⼿,使⽤者需要记忆很多命令和快捷键,熟练才能⽣巧,所以需要⼀段时间的学习和适应,这会增加初学者的学习成本,所以这⾥不推荐⼤家使⽤。
CentOS 下有⼀款⾃带的图形界⾯编辑器,叫做 Gedit。Gedit 是⼀款简单实⽤的⽂本编辑器,界⾯优雅,⽀持语法⾼亮,⽐ Vim 容易上⼿,它和 Windows 下的编辑器没有什么两样。本教程将 Gedit 作为C语⾔代码的编辑器。
如果你使⽤的是其它的 Linux 发⾏版,可能没有默认安装 Gedit,这个时候就得⾃⼰安装,具体步骤为:
$ sudo apt-add-repository ppa:ubuntu-on-rails/ppa #添加ubuntu的软件源
$ sudo apt-get update #更新软件列表
$ sudo apt-get install gedit-gmate #安装
⾸先,在我们⾃⼰的⽤户⽬录下新建⼀个名为demo的⽂件夹。这个⽂件夹专门⽤来存放与C语⾔相关的⽂件,例如源⽂件、⽬标⽂件、可执⾏⽂件等,它专供我们学习使⽤。
⽤户⽬录有时候也叫 home ⽂件夹或者主⽂件夹,它的路径是 /home/username,其中 username 就是我们登录 Linux 时使⽤的⽤户名。Linux 会在 home ⽬录下为每⼀个登录的⽤户创建⼀个⽂件夹,专门⽤来存放该⽤户使⽤到的配置⽂件、⽂本⽂档、图⽚、可执⾏程序等,以和其他⽤户区分开来。
接下来需要创建⼀个空⽩的 main.c 源⽂件。main.c 其实就是⼀个纯⽂本⽂件,并没有任何特殊格式,但是 Linux 不像 Windows,可以在右键菜单中新建⽂本⽂档,Linux 必须使⽤命令来创建,如下所⽰:
$ cd demo #进⼊ demo ⽬录,这是源⽂件所在的⽬录
$ touch main.c #使⽤ touch 命令创建⼀个名为 main.c 的空⽂件
$ gedit main.c #使⽤ gedit 命令编辑 main.c
这样就完成了源⽂件的创建,并能够使⽤ Gedit 编辑源⽂件了。
在 Gedit 中输⼊下⾯的C语⾔代码:
1. #include <stdio.h>
2. int main()
3. {
4. puts("C语⾔中⽂⽹");
5. return 0;
6. }
输⼊完成后的效果如下图所⽰:
Ctrl+S保存⽂件,就完成了源代码的编辑⼯作。此时需要关闭 Gedit 的窗⼝,$ gedit main.c命令才算执⾏结束,才能在控制台继续输⼊其它命令。
下图演⽰了在控制台上的实际效果:
注意,在 CentOS 下,使⽤touch命令创建完 main.c 后,进⼊ demo ⽬录,在右键菜单中也可以使⽤ Gedit 打开 main.c,如下图所⽰:
GCC 编译器
Linux 下使⽤最⼴泛的 C/C++ 编译器是 GCC,⼤多数的 Linux 发⾏版本都默认安装,不管是开发⼈员还是初学者,⼀般都将 GCC 作为Linux 下⾸选的编译⼯具。本教程也毫不犹豫地使⽤ GCC 来编译C语⾔程序。
GCC 仅仅是⼀个编译器,没有界⾯,必须在命令⾏模式下使⽤。通过gcc命令就可以将源⽂件编译成可执⾏⽂件。
1) ⽣成可执⾏程序
最简单的⽣成可执⾏⽂件的写法为:
$ cd demo #进⼊源⽂件所在的⽬录
$ gcc main.c #在 gcc 命令后⾯紧跟源⽂件名
打开 demo ⽬录,会看到多了⼀个名为 a.out 的⽂件,这就是最终⽣成的可执⾏⽂件,如下图所⽰:
停止进程的快捷键是什么
这样就⼀次性完成了编译和链接的全部过程,⾮常⽅便。
空白符号复制码注意:不像 Windows,Linux 不以⽂件后缀来区分可执⾏⽂件,Linux 下的可执⾏⽂件后缀理论上可以是任意的,这⾥的 .out只是⽤来表明它是 GCC 的输出⽂件。不管源⽂件的名字是什么,GCC ⽣成的可执⾏⽂件的默认名字始终是 a.out。
如果不想使⽤默认的⽂件名,那么可以通过-o选项来⾃定义⽂件名,例如:
$ gcc main.c -o main.out
这样⽣成的可执⾏程序的名字就是main.out。
因为 Linux 下可执⾏⽂件的后缀仅仅是⼀种形式上的,所以可执⾏⽂件也可以不带后缀,例如:
$ gcc main.c -o main
这样⽣成的可执⾏程序的名字就是main。
通过-o选项也可以将可执⾏⽂件输出到其他⽬录,并不⼀定⾮得在当前⽬录下,例如:
$ gcc main.c -o ./out/main.out
或者
$ gcc main.c -o out/main.out
表⽰将可执⾏⽂件输出到当前⽬录下的out⽬录,并命名为main.out。./表⽰当前⽬录,如果不写,默认也是当前⽬录。
注意:out ⽬录必须存在,如果不存在,gcc 命令不会⾃动创建,⽽是抛出⼀个错误。
2) 运⾏可执⾏程序
上⾯我们⽣成了可执⾏程序,那么该如何运⾏它呢?很简单,在控制台中输⼊程序的名字就可以,如下所⽰:
$ ./a.out
./表⽰当前⽬录,整条命令的意思是运⾏当前⽬录下的 a.out 程序。如果不写./,Linux 会到系统路径下查 a.out,⽽系统路径下显然不存在这个程序,所以会运⾏失败。
所谓系统路径,就是环境变量指定的路径,我们可以通过修改环境变量添加⾃⼰的路径,或者删除某
个路径。很多时候,⼀条 Linux 命令对应⼀个可执⾏程序,如果执⾏命令时没有指明路径,那么就会到系统路径下查对应的程序。
输⼊完上⾯的命令,按下回车键,程序就开始执⾏了,它会将输出结果直接显⽰在控制台上,如下所⽰:
$ cd demo
$ gcc main.c
$ ./a.out
C语⾔中⽂⽹
$
下图演⽰了在控制台上的实际效果:
如果程序在其它⽬录下,运⾏程序时还要带上⽬录的名字,例如:
$ ./out/main.out
或者
$ out/main.out
这个时候加不加./都⼀样,Linux 能够识别出out是⼀个⽬录,⽽不是⼀个命令,它默认会在当前路径下查该⽬录,⽽不是去系统路径下查,所以不加./也不会出错。
注意,如果程序没有执⾏权限,可以使⽤sudo命令来增加权限,例如:
$ sudo chmod 777 a.out
完整的演⽰
为了让读者有⼀个更加全⾯的认识,我们不妨将上⾯两部分的内容连接起来,完整的演⽰⼀下从编辑源⽂件到运⾏可执⾏程序的全过程:
$ cd demo #进⼊源⽂件所在⽬录
$ touch main.c #新建空⽩的源⽂件
$ gedit main.c #编辑源⽂件
$ gcc main.c #⽣成可执⾏程序
websocket spring$ ./a.out #运⾏可执⾏程序
C语⾔中⽂⽹
$ #继续等待输⼊其它命令
下图是在控制台上的实际效果:
分步骤编译
上⾯讲解的是通过gcc命令⼀次性完成编译和链接的整个过程,这样最⽅便,⼤家在学习C语⾔的过程中⼀般都这么做。实际上,gcc命令也可以将编译和链接分开,每次只完成⼀项任务。
1) 编译(Compile)
将源⽂件编译成⽬标⽂件需要使⽤-c选项,例如:
gcc -c main.c
就将 main.c 编译为 main.o。打开 demo ⽬录,就会看到 main.o:
使用nginx还需要tomcat吗对于微软编译器(内嵌在 Visual C++ 或者 Visual Studio 中),⽬标⽂件的后缀为.obj;对于 GCC 编译器,⽬标⽂件的后缀为.o。
⼀个源⽂件会⽣成⼀个⽬标⽂件,多个源⽂件会⽣成多个⽬标⽂件,源⽂件数⽬和⽬标⽂件数⽬是⼀样的。通常情况下,默认的⽬标⽂件名字和源⽂件名字是⼀样的。
web前端
如果希望⾃定义⽬标⽂件的名字,那么可以使⽤-o选项,例如:
gcc -c main.c -o a.o
这样⽣成的⽬标⽂件的名字就是 a.o。
2) 链接(Link)
在gcc命令后⾯紧跟⽬标⽂件的名字,就可以将⽬标⽂件链接成为可执⾏⽂件,例如:
gcc main.o
就将 main.o 链接为 a.out。打开 demo ⽬录,就会看到 a.out。
在gcc命令后⾯紧跟源⽂件名字或者⽬标⽂件名字都是可以的,gcc命令能够⾃动识别到底是源⽂件还是⽬标⽂件:如果是源⽂件,那么要经过编译和链接两个步骤才能⽣成可执⾏⽂件;如果是⽬标⽂件,只需要链接就可以了。
使⽤-o选项仍然能够⾃定义可执⾏⽂件的名字,例如:
gcc main.o -o main.out
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论