首页 > 代码库 > Ubuntu下用glade和GTK+开发C语言界面程序(二)——gcc常用命令介绍
Ubuntu下用glade和GTK+开发C语言界面程序(二)——gcc常用命令介绍
谈到linux,没人不懂gcc,当然,学过C语言的都该知道gcc,毕竟所有的类C编译器基本都有gcc来构成。
GCC的意思随着时间的发展也从最初的GNU C Compiler发展到GNU Compiler Collection,也就是GNU编译器的统称集合。GCC对与操作系统与硬件的的支持,可以说是:无处不在。
一、gcc编译过程
GCC的编译过程要分为四个阶段来进行:预处理阶段,编译阶段,汇编阶段,以及链接阶段。
1、预处理阶段(也称预编译阶段)
gcc -E helloworld.c -o -helloworld.i
上述的-E参数将helloworld.c 文件进行预处理,-o参数将预处理后的文件输出为helloworld.i 文件
-E 为gcc预处理参数,其后跟.c源代码文件
-o 为gcc输出文件参数,其后跟.i的文件名
2、编译阶段
gcc -S helloworld.i -o helloworld.s-S参数将helloworld.i文件进行编译生成helloworld.s文件
-S参数为gcc编译参数,其后跟经过预处理后生成的.i文件
3、汇编阶段
gcc -c helloworld.s -o helloworld.o-c参数将汇编代码helloworld.s进行汇编生成目标代码helloworld.o
4、链接阶段
gcc helloworld.o -o helloworld将helloworld.o 文件进行链接,生成helloworld可执行程序
最后输入
./helloworld可以运行可执行程序。
对于链接过程来说,又分为两种形式:
(一)静态链接,静态链接依赖的动态链接库较少,对动态链接库的版本不会太敏感,具有较好的兼容性,当然这样生成的程序比较大。静态库的文件后缀名为 .a
(二)动态链接,生成的程序比较小,占用的内存较少。动态库的文件后缀名为 .so
二、用gcc编译程序
对于我们在linux下写的C程序,不必像上面那样面面俱到的来进行编译,可以用一行命令来直接生成可执行文件。
gcc -Wall -g -o helloworld helloworld.c上面命令将helloworld.c文件直接编译生成可执行程序helloworld。
-o为输出参数,其后跟可执行文件的名字
-Wall开启gcc编译器几乎所有的常用的警告,强烈建议在编译过程中使用此参数。-Wall是最常用的编译警告参数,编译的警告非常有助于检测程序存在的问题。
-g参数表示生成的目标文件带调试信息,调试信息可以在程序异常退出时,版主分析错误产生的源头,包括产生的错误文件名和行号等信息。
编译多个文件
当开发的程序有多个源文件时,可以使用下面的命令
gcc -Wall -g -filename1.c -filename2.c -filename3.c filename4.c filenameX.c -o main上面的命令编译多个源文件,并生成可执行文件main
对于编译过程中如果编译的源文件的头文件和.c文件不在一个目录下,可以使用 -I(大写i)参数来进行关联其他目录中的文件
例如
gcc -Wall -g -fliename.c -I /home/filename/inc -o main上面的命令将会首先到/home/filename/inc中寻找头文件,之后才会引入库函数中的头文件和本地文件夹下的头文件
如果程序中使用了非库文件中的文件,例如,#include <math.h>,那么还需要关联相应的库文件后编译才不会出错,关联动态库的参数为-l(小写l,不是i),,后面跟需要关联的动态库的名字
例如
gcc -Wall -g -o main -lm main.c-lm即表示关联系统库中的libm.a文件, 路径为/usr/lib/libm.a。
-l参数后面紧跟库名
-L(大写l)参数可以指定具体的目录,是编译器在搜寻系统库目录前先搜寻此目录
例如
gcc -Wall -g -L ./lib -lhello -o helloworld
OK,到这里相信对gcc编译命令有了一个初步的了解,常用的使用gcc的命令也都在上面给出了具体的例子,下一篇中会写些关于make命令的使用方法和构建自己的makefile文件来使编译更加简单更加智能。
Ubuntu下用glade和GTK+开发C语言界面程序(二)——gcc常用命令介绍
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。