热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Linux环境中高效地创建、编译与运行C语言代码

本文面向第一次在linux尝试写C语言程序的新人。有经验的请绕行。C语言用法不是本文介绍的关键,本文只是引入如何第一次在linux系统下编写、编译和执行一个简单的c程序。学会后请自行深入

本文面向第一次在linux尝试写C语言程序的新人。有经验的请绕行。


C语言用法不是本文介绍的关键,本文只是引入如何第一次在linux系统下编写、编译和执行一个简单的c程序。学会后请自行深入。


= 前提基础 =

Linux系统的路径写法有两种,一种是相对路径一种是绝对路径。

绝对路径都是以“/”开头的,比如/usr/bin/vi或者/home/zorro/,代表从根目录"/"开始计算的绝对路径。

相对路径都是不以“/”开头的,不如git/linux/或者work/testplan,代表从当前所在目录开始计算的相对路径,如果想知道你现在所在的目录是什么可以借助pwd命令查看。


你刚刚登陆进来后默认是处在当前用户的家目录的,/home目录下一般存放所有普通用户的家目录(并不是所有的用户都有家目录,也不是限定家目录一定要在/home下)。比如我们在安装系统是创建了一个叫zorro的用户,那么就会存在一个/home/zorro/的目录,/home/zorro目录作为zorro这个用户的家目录,每次登陆zorro用户就会默认从这个目录开始。


linux最最常用的两个命令:cd和ls。

ls的意义是list directory contents。用法是:

ls [option].... [file]...

在linux的文档中中括号代表可选项,没有也可以执行。所以ls命令可以这样用:

1、直接执行"ls",代表查看当前所在目录的内容。如:

2、查看某个目录下的内容则在ls后面跟上路径名,路径名可以是绝对路径以可以是相对路径,如:

3、想看更详细一点的信息则可以用"-l"(注意是小写的L前面有个减号),linux系统下命令的选项一般都有减号跟着,如下图,可以看到除了内容名字外还有访问权限,属主属组,修改日期等信息。以"d"开头的代表是目录,以"-"开头的代表是普通文件。Linux下有几大文件类型上述是其中最常见的两种,其它的请自行去了解。

ls命令还有很多用法,比如-d选项,还有很多别的。具体请运行“man ls”查看,退出查看可按Q键。


cd是一个内建命令,它不是一个单独的可执行文件,它是命令行解释器自带的。cd的用法很简单,就是cd后面接路径名,可以是绝对路径也可以是相对路径,代表进入这个路径。进入某个路径其实就是把这个路径作为当前所在路径,也就是相对路径的起点变了。


关于路径还有两个要说的地方,那就是"."和".."。“.”代表当前路径,".."代表当前路径的上一级目录的路径。比如执行“cd ..”就是退进到上一级目录,如果是"cd ../.."就是当前路径退两级。"ls ../zorro"就是查看上一级目录的zorro的内容。


cd和ls不是任何路径都能进入和查看的,会有访问控制的限制。这个以后再说。


还有几个常用的,touch可用于创建一个普通文件,mkdir可用于创建目录,less可以以只读方式打开一个文件。具体的可参考相应的man文档。


= 编辑器 =

linux下两大编辑器阵营,一个是emacs,一个是vi。不要小看这两大编辑器,它们的功能远远比你一般理解上的编辑器强太多太多倍了。不过本文仅仅就如何简单使用它们编写代码、修改代码并保存。

上文我们说了安装一个Fedora-19系统,下面的描述都是针对Fedora-19的情况下。


== vi ==

vi是Unix的传统编辑器,现在传承到了Linux下。常听到的vim可以理解为vi的升级版,在Fedora下如果你装了vim,那么你执行vi的时候实际上就是执行了vim。

第一步:安装

打开终端,在终端上执行

sudo yum install vim

回车,如果网络良好,yum会帮你计算安装包依赖然后给你一个需要安装的包列表,你只需要输入“y”回车就行了。如果一切顺利vim就已经安装到系统中了。


第二步:编辑

在终端执行

vi hello-vi-world.c

就会进入vi的界面

现在还不能编辑,要想进入编辑模式需要按"i"键,按下之后进入插入内容的模式,会看到最下方出现“插入”或"INSERT"的字样:


人啊后就可以开始编辑了,怎打字就不用多说了吧,比如写一个最简单的C程序

现在还内容还没有被写到文件里,如果想要保存则按照如下步骤进行:

1、按Esc键退出编辑模式。

2、输入一个":"冒号键,在左下角出现一个冒号。

3、输入一个"w"键,然后回车。你会看到下方提示已经written,说明保存成功了,这个文件也被自动创建。

如果要退出vi编辑器则把第三步的w换成q回车就退出了。

如果第三步想要保存退出,冒号后面写"wq"回车就行了,代表保存然后退出。或者直接写"x"回车也代表保存退出。


顺带说一下,如果你装了中文输入法是可以使用的。Fedora-19的默认切换输入法组合键是Alt+shift,或者你手动去点右上角下图的位置去选择:


== emacs ==

安装emacs编辑器可以执行:

sudo yum install emacs

输入口令,然后y确认。


emacs编辑器是由开源软件的精神领袖Richard Stallman编写的,功能也非常强大。

在终端输入

emacs hello-em-world.c &

就会看到emacs启动后的界面


看到上下两部分,上部分是编辑的地方,下面是一个欢迎界面可以通过配置默认去掉它。手动去掉可以把光标放到上半部分,然后敲击Ctrl+x然后松手后再敲击“1”,这样就只能看到当前光标所在的编辑缓冲区了。注意Ctrl+x是一个常用的前缀组合键。

现在开始编辑,编辑一个简单的C程序,如下:

现在内容还是在缓冲区中,如果要保存可以使用组合键Ctrl+x然后再输入Ctrl+s,保存当前文件。

如果要退出则按:Ctrl+x然后再按Ctrl+c。这样就退出emacs了。


= 编译 =

Linux下的常用编译器就是gcc系列,C++的是g++。如果你还没安装gcc则需要安装:sudo yum install gcc。


安装完后我们尝试对上面两个程序分别进行编译,如果要将hello-vi-world.c编译成可执行二进制文件,则执行:

gcc -o hello-vi-world hello-vi-world.c -Wall

如果没有语法错误就编译好了,我们用ls看一下。


看到一个带"x"权限(可执行权限)的绿色文件(不一定会显示颜色)。下面尝试执行一下试试,执行谁只要在终端上输入要执行的文件的路径名即可,比如输入./hello-vi-world(注意前面一个点),代表执行当前路径下的hello-vi-world文件。


可以看到执行后输出的结果,可以自己尝试编译并执行hello-em-world.c。


gcc其实有很多很多功能,比如要想预编译hello-em-world.c文件可以执行

gcc -o hello-em-world.i hello-em-world.c

执行成功后就会出现一个hello-em-world.i的文件,可以用less,vi或emacs查看一下它的内容,就是经过预编译后的内容。


如果要进行编译,这里说的编译是纯粹的编译,就是把c代码编译成汇编代码,则可以执行:

gcc -S -o hello-em-world.s hello-em-world.i

把.i文件写为hello-em-world.c也行,就是跳过手动预编译直接完成预编译和编译两个过程。这时会得到一个hello-em-world.s文件,打开看一下,里面是编译好的使用于当前体系结构的汇编代码。


把汇编代码进行汇编可以执行:

gcc -c -o hello-em-world.o hello-em-world.s

把.s文件换成.c也行,就是自动完成预编译、编译和汇编三个过程。现在得到一个hello-em-world.o文件,这一个二进制文件,但不是最后的可执行二进制文件,因为它还缺少最后一步连接处理。


最后对.o文件进行连接,我们这里就一个.o文件所以简单,经常是需要有多个.o文件需要连接。连接执行:

gcc -o hello-em-world hello-em-world.o

如果把最后的.o文件写成.c,那就和最开始我们用hello-vi-world.c编译时示范的那样了。实际上那样是完成了预编译、编译、汇编和连接一连串的过程。


好了,现在执行一个最后的编译结果吧。


gcc可以支持很多平台,刚才示范的是通用PC下的gcc编译,你还可以交叉编译,使用gcc针对arm或者avr或者其它平台的版本。这个就自己去研究吧。


想了解更多gcc的只是可以到GNU的网站上去看看。


顺带提一下gdb是常用的调式软件,如何使用gdb调式gcc编译出来的程序请自行学习。可能我会在后面略微介绍。


内容粗糙简陋,全在抛砖引玉。想学习就自己去深入理解吧,编辑器不用两个都很熟,选择其中一个用熟了就行了。







推荐阅读
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • NFS(Network File System)即网络文件系统,是一种分布式文件系统协议,主要用于Unix和类Unix系统之间的文件共享。本文详细介绍NFS的配置文件/etc/exports和相关服务配置,帮助读者理解如何在Linux环境中配置NFS客户端。 ... [详细]
  • 在 openSUSE Tumbleweed 系统上搭建 51 单片机开发环境并进行编程实践。首先,通过 `sudo zypper in emacs` 命令安装文本编辑器 Emacs。接着,使用 `sudo zypper in sdcc` 安装 SDCC 编译器。最后,利用 `wget` 下载 sdcflash Python 脚本,以便于单片机的烧录和调试。此外,还介绍了如何配置开发环境,确保各组件协同工作,提高开发效率。 ... [详细]
  • https:www.hollischuang.comarchives74 对于Java程序员来说,null是令人头痛的东西。时常会受到空指针异常(NPE ... [详细]
  • Lunix历史及如何学习
    1.Lunix是什么1.1Lunix是操作系统还是应用程序Lunix是一套操作系统,它提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构, ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
  • Python数据分析入门指南:全面了解Python在数据科学中的应用 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • CentOS7系统目录LINUX有四种基本文件系统类型普通文件:如文本文件、C语言元代码、SHELL脚本、二进制的可执行文件等,可用cat、less、 ... [详细]
author-avatar
当我繁华尽落_821
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有