当前位置:首页 >> 理学 >>

4.Linux环境下C程序编辑、编译、运行


国家示范校市财政支持重点建设专业 《嵌入式技术与应用》

基于Linux的C程序设计
第一讲:Linux环境下C语言编辑、编译、运行

天津职业大学

丁桂芝

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

Linux下程序的开发环境和开发过程
? Linux下的开发环境主要有两类: 字符界面的开发环境和图形化的集成开发环境。 ? 在字符界面下的开发环境中,一般使用Vi、vim或 Emacs文本编辑器来编写源程序,然后使用gcc编译器 来编译程序,当程序出现错误而不能实现既定的功能 时,使用gdb调试器来调试程序。如果开发的是一个大 型程序,可能需要编写Makefile文件来自动编译程序, 并使用CVS对项目进行管理。

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

Linux下程序的开发环境和开发过程
? Linux也提供了许多图形化的集成开发环境,例如 KDevelop集成开发环境。集成开发环境整合了文本 编辑器、编译器、调试器以及显示执行结果等诸多 功能,KDevelop还提供功能完备的帮助功能。在集 成开发环境下可以完成程序编写、编译、调试和执 行的所有动作,适合大型程序的开发。

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

Linux下程序的开发环境和开发过程
源程序(*.c) 预处理 编译 组译 链接 可执行文件

Vi、vim或Emacs 文本编辑器
预处理器 编译器 组译器 连接器

gcc 编译和连接
学校网址:Http://www.tjtc.edu.cn Guizhi Ding dingguizhi@ gmail.com

例:在字符界面下的开发环境中,使用Vi文本 编辑器编写程序,调式以下程序:

#include <stdio.h> int main() { printf (“Welcome to Linux Programming\n”); return 0; }
学校网址:Http://www.tjtc.edu.cn Guizhi Ding dingguizhi@ gmail.com

操作过程: #mkdir ding #cd ding #vi test.c #gcc –o test test.c 建立目录ding 进入目录ding 编辑文件,文件名:test.t 编译并连接源文件test.c, 输出到test文件,形成可 执行文件test.exe 执行可执行文件test

#test

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

Linux下的目录结构
/usr /bin /var /lib /dev /etc /tmp /home /mnt /root /proc /sbin

/local /lib /bin

/bin /etc

/src /man

/

/usr1 /up-armmp3

/usr2

/usr3

/up-netarm2410

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

Linux下的目录结构

Linux下的目录结构
/

bin

dev

root

home

tmp

usr

var

proc

lib

...

tyq

admin

student

test.c

program

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

Vi命令
常用VI命令及解释
命令 解释 命令 解释

Esc
h/k/j/i或方向键 /关键字

进入或退出命令模式
移动光标位置 向下查找关键字

i/I
a/A o/O

插入
在光标后输入 插入新行

x/X
D/d Y/y p/P U

向前,向后删除一个字符
删除整行 复制整行 在上一行,下一行粘贴 还原前一动作

r/R
W Q wq set nu

在光标后改写
保存文件 退出VI 保存文件并退出 显示行号

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

gcc的使用

gcc的使用格式如下: $ gcc [options][filenames]
其中filenames为所要编译的程序源文件。

当使用gcc时,gcc会完成预处理、编译、汇编和连接。前三 步分别生成目标文件,连接时,把生成的目标文件链接成可执 行文件。gcc可以针对支持不同的源程序文件进行不同处理, 文件格式以文件的后缀来识别。

在使用gcc编译器的时候,我们必须给出一系列必要 的调用参数和文件名称。gcc编译器的调用参数大约 有100多个,其中多数参数我们可能根本就用不到, 这里只介绍其中最基本、最常用的参数。
学校网址:Http://www.tjtc.edu.cn Guizhi Ding dingguizhi@ gmail.com

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

C程序中的头文件包含两种情况∶ A)#include B)#include “myinc.h” 其中,A类使用尖括号(< >),B类使用双引号(“ ”)。对于A类,预 处理程序在系统预设包含文件目录(如/usr/include)中搜寻相应的 文件,而对于B类,则在当前目录中搜寻头文件, 如果在当前目

录中没有找到需要的文件,就到指定的dirname目录中去寻找。

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

在程序设计中,如果我们需要的这种包含文件分 别分布在不同的目

录中,就需要逐个使用-I选项给出搜索路径。
-Ldirname,将dirname所指出的目录加入到程序函数档案库文件的目 录列表中,是在连接过程中使用的参数。在预设状态下,连接程序 ld在系统 的预设路径中(如/usr/lib)寻找所需要的档案库文件,这个 选项告诉连接程序,首先到-L指定的目录中去寻找,然后到系统预 设路径中寻找,如果函数 库存放在多个目录下,就需要依次使用这 个选项,给出相应的存放目录。

-lname,在连接时,装载名字为“libname.a”的函数库,该函数库位
于系统预设的目录或者由-L选项确定的目录下。例如,-lm表示连接 名为 “libm.a”的数学函数库。

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

gcc的错误类型及对策
gcc 编译器如果发现源程序中有错误,就无法继续进行,也 无法生成最终的可执行文件。为了便于修改,gcc给出错误资 讯,我们必须对这些错误资讯逐个进行分析、 处理,并修改 相应的语言,才能保证源代码的正确编译连接。gcc给出的错 误资讯一般可以分为四大类,下面我们分别讨论其产生的原 因和对策。 第一类∶C语法错误 错误资讯∶文件source.c中第n行有语法 错误(syntex errror)。这种类型的错误,一般都是C语言的语法 错误,应该仔细检查源代码文件中第n行及该行之前的程序, 有时也需要对该文件所包含的头文件进行检查。

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

第二类∶头文件错误 错误资讯∶找不到头文件 head.h(Can not find include file head.h)。这类错误 是源代码文件中的包含头文件有问题,可能的原 因有头文件名错误、指定的头文件所在目录名错

误等,也可能是错误地使用了双引号和尖 括号。

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

第三类∶未定义符号 错误资讯∶有未定义的符号 (Undefined symbol)。这类错误是在连接过程中出现的, 可能有两种原因∶一是使用者自己定义的函数或者全局 变量所在源代码文件,没有被编译、连接,或者干脆还 没有定义,这需要使用者根据实际情况修改源程序,给 出全局变量或者函数的定义体;二是未定义的符号是一 个标准的库函数,在源程序中使用了该库函数,而连接 过 程中还没有给定相应的函数库的名称,或者是该档案

库的目录名称有问题,这时需要使用档案库维护命令ar
检查我们需要的库函数到底位于哪一个函数库中,确定 之后,修改gcc连接选项中的-l和-L项。
学校网址:Http://www.tjtc.edu.cn Guizhi Ding dingguizhi@ gmail.com

调试以下程序: #include<studio.h> main() { printf(“%d”,i); printf(“hello,world!”) }
学校网址:Http://www.tjtc.edu.cn Guizhi Ding dingguizhi@ gmail.com

第四类∶档案库错误 错误资讯∶连接程序找不到所需的 函数库,例如∶ ld: -lm: No such file or directory 这类错误 是与目标文件相连接的函数库有错误,可能的原因是函 数库名错误、指定的函数库所在目录名称错误等,检查 的方法是使用find命令在可能的目录中寻 找相应的函数 库名,确定档案库及目录的名称并修改程序中及编译选 项中的名称。

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

例:一个整数(10万 以内),它加上100 后是一个完全平方数,再加上168又是一 个完全平方数,请问该数是多少?
注:一个数如果是另一个整数的完全平方,那么 我们就称这个数为完全平方数,(即如果一个数 的平方根的平方等于该数,这说明此数是完全平 方数 ),也叫做平方数。例如: 0,1,4,9,16,25,36,49,64,81

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

1. 程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268 后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析: 2. 程序源代码: #include "math.h" main()

{
long int i,x,y,z; for (i=1;i<100000;i++) { x=sqrt(i+100); y=sqrt(i+268); /*x为加上100后开方后的结果*/ /*y为再加上168后开方后的结果*/

if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说 明此数是完全平方数*/ printf("\n%ld\n",i); } }
学校网址:Http://www.tjtc.edu.cn Guizhi Ding dingguizhi@ gmail.com

调试10个程序。

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

作业:
1. 求一个数的绝对值。 2. 输入两个数并判断两个数是否相等。 3. 输入3个数并将它们由小到大输出。 4. 用while循环求 1-100之间的自然数的和。 5. 输入正整数n,求n! 6. 循环嵌套输出九九表。 7. Break应用:输出圆面积,面积大于100时停止。 8. 求输入的十个整数中正数的个数及其平均值。 9. 求Fibonacci数列:1,1,2,3,5,8,……的前40个数。 10. 20



? n!
n ?1

11. 新技术资料检索:关于三网融合,以及三网融合给你带来的启示。

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com

学校网址:Http://www.tjtc.edu.cn

Guizhi Ding

dingguizhi@ gmail.com


相关文章:
lab4 Linux程序开发和C程序编译
实验四 Linux 程序开发和 C 程序编译 1 实验目的:掌握 Linux 环境下的基本操作...subdir test1.c test.c text.c <3> 输入./a.out,运行程序,屏幕上显示...
Linux环境下C语言编译、运行的底层工作原理(1)
Linux环境下C语言编译运行的底层工作原理(1)_计算机软件及应用_IT/计算机_专业...0x00000000006008c0 0x0000000000400498 —— Size(decimal) 4 8 8 40 67 ——...
操作系统lab4 Linux程序开发和C程序编译
实验四 Linux 程序(Shell/C)开发和 C 程序编译 1 实验目的:掌握 Linux 环境下的基本操作命令。 编写简单的 C 程序,编译运行和调试。 2 实验内容:掌握 Linux ...
实验1 运行一个简单linux c程序
2.了解在该系统上如何编辑编译、连接和运行一个 linux C 程序。 3.通过运行简单的 linux C 程序,初步了解 linux C 源程序的特点。 4.掌握 linux 常用的...
实验4:Linux C语言编程和调试
实验4:Linux C语言编程和调试_计算机软件及应用_IT/计算机_专业资料。实验报告 ...在 Linux 环境下 C 程序编辑编译运行; 2.多文件的编译及连接; 3....
Linux下C语言程序的编译与调试实验报告
Linux下C语言程序的编译与调试实验报告_计算机软件及应用_IT/计算机_专业资料。Linux...、实验步骤: 1. 程序编辑 在桌面环境下新建一个文件,打开文件输入代码,保...
Linux环境下C语言编译、运行的底层工作原理(3)
Linux环境下C语言编译运行的底层工作原理(3)_计算机软件及应用_IT/计算机_专业资料。Linux环境下C语言编译运行的底层工作原理(3)Linux...
实验1:Linux下C语言编程实践
Linux 环境下 C 程序编辑编译运行; 2.多文件的编译及连接; 3.应用 gdb 调试程序; 三、实验工具与准备计算机 PC 机,Linux Ubuntu 操作系统 四、...
linux下编译C语言
linux下编译C语言_生活休闲。linux很有用 ...4. 共享函数库与静态函数库 Linux 系统上的函数库...此时运行编译好的 goodbye 会提示找不到共享函数库:...
实验三_LINUX_下C语言使用、编译与调试实验2
空调水系统的设计与施工... 123页 4下载券实​验​三​_​L​I​...Linux 提供的 vi 编辑器来编译 C 程序 2、 学会利用 gcc、gdb 编译、调试 ...
更多相关标签: