完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
我们在 Windows 下使用 C 语言开发的时候,一般都会有支持 Windows 的开发工具,比如我们学习 51 单片机或者 STM32,所使用的的 Keil 开发软件。此类开发工具一般都会集编辑、编译于一体,我们只需要编辑好代码,电机开发工具的编译按钮,就可以自动为我们编译出可执行的二进制文件了。Ubuntu 下的 C 语言开发与 Windows 下的 C 语言开发不一样的,并没有图形界面的开发工具,而且编辑和编译是分开的。我们需要使用文本编辑软件先编写代码,然后使用编译工具(GCC)来编译,最终生成可执行的二进制文件。如果我们的工程中有多个源文件,在编译的时候我们通常会通过 Makefile 文件来管理整个工程的源文件。本章我们来学习如何在 Ubuntu 下进行 C 语言成的编辑,GCC 编译,Makefile 文件的使用。通过本章学习我们可以掌握 Linux 下的 C 语言开发基本方法,为后面的学习做好准备。
3.1 Linux 下编写第一个 C C 程序 程序 本章节开始的部分我们介绍了 Ubuntu 下 C 程序开发分成两部分:编辑和编译。Ubuntu 下有很多种文本编辑的工具,如 vim、Gedit、Emacs,这里我们使用前面章节介绍的 vim 文本编辑工具来编辑 C 程序。相信大家在学习 C 语言的时候都是从“Hello World”这个程序开始的吧,下面我们通过这个程序,来学习下 Linux下 C 程序开发的流程。 3.1.1 代码编写 首先我们在用户根目录下建立文件夹“work”,用于保存所有 C 语言的程序,运行结果如下图所示: 然后进入创建的文件夹 work,为了方便管理,我们每个例程都创建单独的文件夹,首先我们创建文件夹“hello_world”来保存我们的第一个 C 程序,如下图所示: 然后进入上图中的 hello_world 文件夹,使用 vi 命令新建文件“main.c”,然后在里面输入下面的代码: #include int mian(int argc, char *argv[]) { printf(“Hello World!n”); return 0; } 编写完以后保存并退出 vim 编辑器,然后可以使用 cat 命令查看代码是否保存成功,如下图所示: 通过上图可以看到代码已经编辑完成了。 3.1.2 代码编译 Ubuntu 下使用 gcc 编译器来编译 C 程序,我们在安装 Ubuntu 系统的时候,gcc 编译器 morning 安装好了,我们可以在终端输入“gcc -v”来查看下 gcc 的版本,如下图所示: 通过上图可以看到 gcc 的版本信息,说明我们的 Ubuntu 上已经安装了 gcc 编译器了,下面我们来看看怎么通过 gcc 编译我们的第一个 C 程序,我们在终端输入“gcc main.c -o main”,然后回车,会生成 main 文件,如下图所示: 在上面的“gcc main.c -o main”这个命令里面“-o“用来指定编译生成的文件名字,我们指定的是 main,所以在图 3.1.2.2 中可以看到生成了文件“main”,如果我们想生成其它的文件名字,我们只需要修改“-o”后面的 main(修改成您希望生成的文件名字)。经过前面的步骤已经生成了可执行文件 main,现在我们演示下在终端如何运行一个可行性的程序,我们直接在终端当前目录下(可执行文件所在的目录下)输入“。/main”,然后回车,就可以运行可执行文件 main 了,运行结果如下图所示: 在上图中运行的命令“。/main”,其中的“。/”代表当前目录下。我们可以看到在终端打印出了 HelloWorld!。至此,Linux 下的 C 语言编辑和编译的一整套流程我们就介绍完了。 3.2 c gcc 编译器 编译器 3.2.1 gcc 命令分析 在 3.1 节我们已经使用 gcc 编译了 Linux 下的第一个 C 程序,gcc 命令的格式如下: gcc [参数] [文件名] 主要参数说明如下: -c 编译、汇编到目标代码(.o),不链接成可执行文件 -g 生成调试信息 -o 编译完成后生成的文件名,如果不使用该选项,默认生成 a.out 文件 -O 对程序进行优化编译,产生的可执行文件执行效率高 -w 不生成任何警告 -S 仅编译到汇编语言,不进行汇编和链接 3.2.2 编译警告错误处理 我们是 Windows 下使用 Keil 或者其他开发工具,在编译的时候,如果程序有错误,开发工具会提示出具体的错误信息,可以很方便的定位到问题点,快速的修改出现的问题,gcc 同样也有类似的功能,下面我们来看下 gcc 的错误提示功能,首先我们在 work 目录下建立文件夹“test2”,然后使用 vim 在 test2 文件夹创建 main.c 文件夹,在 main.c 文件输入如下代码: #include int main(int argc, char *argv[]) { int a; a = 1 printf(“a=n”, a); return 0; } 上面代码有两处错误: 第 7 行 最后缺少“;” 第 9 行 printf 语法不对,应该为:printf(“a =%dn”, a); 我们使用 gcc 编译 main.c,可以看到 gcc 会提示错误信息,如下图所示: 从上图中可以看到在 mian.c 文件的第 9 行 printf 前面缺少“;”我们在第 7 行“a = 1”后面加上“;”,然后继续编译,如下图所示: 从上图可以看出编译提示语法格式不对,我们把第 9 行修改成“printf(“a=%dn”, a);”,然后在继续编译,如下图所示: 我们可以看到这次 gcc 编译通过,最终生成了文件 main。我们在终端执行 main,运行结果如下图所示: 从上图可以看到运行的结果和我们涉及到额结果一致,通过本例程可以看到 gcc 编译器不仅可以检测出 程序的错误,而且还会标记处错误在哪个文件的哪一行,很方便的帮助我们去修改问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
689 浏览 0 评论
1102 浏览 1 评论
2469 浏览 5 评论
2803 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2642 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
650浏览 9评论
648浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
777浏览 6评论
622浏览 5评论
663浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 04:42 , Processed in 0.878446 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号