Ubuntu下用glade和GTK+开发C语言界面程序(二)——gcc常用命令介绍
2014-08-30 19:54
375 查看
谈到linux,没人不懂gcc,当然,学过C语言的都该知道gcc,毕竟所有的类C编译器基本都有gcc来构成。
GCC的意思随着时间的发展也从最初的GNU C Compiler发展到GNU Compiler Collection,也就是GNU编译器的统称集合。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
-o为输出参数,其后跟可执行文件的名字
-Wall开启gcc编译器几乎所有的常用的警告,强烈建议在编译过程中使用此参数。-Wall是最常用的编译警告参数,编译的警告非常有助于检测程序存在的问题。
-g参数表示生成的目标文件带调试信息,调试信息可以在程序异常退出时,版主分析错误产生的源头,包括产生的错误文件名和行号等信息。
对于编译过程中如果编译的源文件的头文件和.c文件不在一个目录下,可以使用 -I(大写i)参数来进行关联其他目录中的文件
例如
如果程序中使用了非库文件中的文件,例如,#include <math.h>,那么还需要关联相应的库文件后编译才不会出错,关联动态库的参数为-l(小写l,不是i),,后面跟需要关联的动态库的名字
例如
-l参数后面紧跟库名
-L(大写l)参数可以指定具体的目录,是编译器在搜寻系统库目录前先搜寻此目录
例如
上面命令执行时会首先到当前目录的lib下寻找库文件,之后才到系统库中寻找需要的库文件。
OK,到这里相信对gcc编译命令有了一个初步的了解,常用的使用gcc的命令也都在上面给出了具体的例子,下一篇中会写些关于make命令的使用方法和构建自己的makefile文件来使编译更加简单更加智能。
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
上面命令执行时会首先到当前目录的lib下寻找库文件,之后才到系统库中寻找需要的库文件。
OK,到这里相信对gcc编译命令有了一个初步的了解,常用的使用gcc的命令也都在上面给出了具体的例子,下一篇中会写些关于make命令的使用方法和构建自己的makefile文件来使编译更加简单更加智能。
相关文章推荐
- Ubuntu下用glade和GTK+开发C语言界面程序(一)
- Ubuntu下用glade和GTK+开发C语言界面程序(三)——学习make的使用方法
- Ubuntu下用glade和GTK+开发C语言界面程序(三)——学习make的用法
- Ubuntu下用glade和GTK+开发C语言界面程序(一)
- gcc编译过程、C语言编译过程分析、环境变量设置、linux文件夹结构和用途介绍、常用文件和目录的操作命令、文件类型
- Ubuntu下安装GTK+及Glade开发C应用界面
- 简单介绍三个C语言图形库C语言其实最擅长的是写纯数据处理的程序 . 非得用C语言写个界面程序那将会变得很困难 . 我刚开始学C语言就是从hello world 开始的 , 后来慢慢开始学从三个数中找
- Dynamics CRM 客户端程序开发:常用工具介绍之Dynamics XRM Tools
- Ubuntu下Android开发Git常用命令
- svn常用命令介绍[ Ubuntu ]
- Ubuntu下开发一些常用命令
- Ubuntu下Linux常用命令详细介绍
- Ubuntu Linux操作系统常用命令详细介绍
- linux常用命令积累 | ubuntu 10.04系统开发Android
- 在Ubuntu下安装GCC编译器及GCC编译器的基本使用命令介绍
- 嵌入式开发基础--Linux常用命令介绍
- Android手机开发ubuntu系统中常用的搜索命令
- Ubuntu Linux操作系统常用命令详细介绍
- Ubuntu常用命令介绍
- gcc常用命令介绍