linux下的C语言程序设计

Linux程序设计基础知识

Linux下C语言编程环境概述 Linux下C语言编程常用的编辑器是vim或emacs,编译器一般用gcc,编译链接程序用make,跟踪调试一般使用gdb,项目管理用makefile。

程序安装目录

对一个Linux开发人员来说,在使用一种编程语言编写程序以前,对操作系统中程序的保存位置有一个透彻的了解是很重要的。

Linux下的程序通常都保存在专门的目录里。系统软件可以在/usr/bin子目录里找到。系统管理员为某个特定的主机系统或本地网络添加的程序可以在/usr/local/bin子目录里找到。

头文件

对C语言来说,这些头文件几乎永远保存在/usr/include及其下级子目录里。那些赖于所运行的 UNIX或Linux操作系统特定版本的头文件一般可以在/usr/include/sys或/usr/include/linux子目录里找到。

在调用C语言编译器的时候,可以通过给出“ -I”编译命令标志来引用保存在下级子目录或者非标准位置的头文件,类似命令如下:

[david@localhost linux]$ gcc -I /usr/openwin/include hello.c

库文件

库文件是一些预先编译好的函数的集合,那些函数都是按照可再使用的原则编写的。

扫描二维码关注公众号,回复: 5908175 查看本文章

标准的系统库文件一般保存在/lib或者/usr/lib子目录里。编译时要告诉 C语言编译器(更确切地说是链接程序)应去查找哪些库文件。默认情况下,它只会查找 C语言的标准库文件。

gcc编译器

安装编译器:yum -y install gcc

开放、自由和灵活是Linux的魅力所在,而这一点在gcc上的体现就是程序员通过它能够更好地控制整个编译过程。 在使用gcc编译程序时,编译过程可以细分为4个阶段:

● 预处理(Pre-Processing)

● 编译(Compiling)

● 汇编(Assembling)

● 链接(Linking)

Linux程序员可以根据自己的需要让gcc在编译的任何阶段结束,检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。

预处理

处理程序中所有带‘’#‘’的语句,主要的工作:头文件的包含和宏的定义。把#include包含进来的头文件插入到#include所在的位置,将#define定义的宏用对应的字符串替换。

编译

检查代码是否有语法错误。如果有错,则会报错,若没有错,则会把 .C 文件编译成 .S 文件。

汇编

将所有的 .S 文件转化为机器能识别的 .o二进制文 件。

链接

将所有的 .o 文件和需要的库文件链接成一个可执行文件。

实例

创建一个名为3.c的文件:

要编译这个程序,只要在命令行下执行如下命令:

这样,gcc 编译器会生成一个名为hello的可执行文件,然后执行./hello就可以看到程序的输出结果了。

命令行中 gcc表示用gcc来编译源程序,-o 选项表示要求编译器输出的可执行文件名为hello ,而hello.c是源程序文件。从程序员的角度看,只需简单地执行一条gcc命令就可以了;

但从编译器的角度来看,却需要完成一系列非常繁杂的工作。首先,gcc需要调用预处理程序cpp,由它负责展开在源文件中定义的宏,并向其中插入#include语句所包含的内容;

接着,gcc会调用ccl和as将处理后的源代码编译成目标代码;最后,gcc会调用链接程序ld,把生成的目标代码链接成一个可执行程序。

为了更好地理解gcc的工作过程,可以把上述编译过程分成几个步骤单独进行,并观察每步的运行结果。

第一步要进行预编译,使用-E参数可以让gcc在预处理结束后停止编译过程:

此时若查看hello.i文件中的内容,会发现stdio.h的内容确实都插到文件里去了,而且被预处理的宏定义也都作了相应的处理。

怎么来写Makefile

Makefile的核心是:规则。当执行make命令时,编译器会读取当前目录下的Makefile,然后根据Makefile的规则编译。规则: 

-------------------------------------------------------------

目标:依赖1 依赖2 … 依赖n

  命令

--------------------------------------------------------------

说明:使用命令,依赖将生成目标       注意:目标在首行顶格写,而命令前有一个TAB键(制表符键),不能使用空格代替。

命令执行条件:

1. “依赖”文件 比 “目标”文件新(指文件日期更新)

2. 没有“目标”这个文件 满足上述条件之一,命令就会执行。

根据命令执行条件让命令再次执行的方法

方法1:用rm命令删除目标文件test

方法2:用touch命令修改(即更新)a.c b.c a.h,从而使依赖文件比目标文件新(指文件日期更新)。

Linux下C语言的makefile编写

先来编写一个最简单的makefile(其为文件名)。

首先编写add.c文件

再编写sub.c文件

最后编写test.h文件,

 

用这三个简单的文件,我们就可以编写文件makefile的代码内容了。

test: add.o sub.o

  gcc -o test add.o sub.o

add.o: add.c test.h

  gcc -c add.c //选项 –c 表示只是编译(compile)源程序,但并没有连接(link)编译好的中间目标文件。

sub.o: sub.c test.h

  gcc -c sub.c

clean: rm -f test *.o //编译完后,键入make clean就会执行这一行语句,即把生成程序test和所有扩展名为.o的目标文件删掉。

运行make编译链接程序

查看输出结果

 

猜你喜欢

转载自www.cnblogs.com/bfcs/p/10715805.html