linux命令详解
GCC的意义只是GNU C编译器。经过这么多年的发展,海湾合作委员会已不仅可以支持C语言;它也支持艾达语言,C++语言,java语言,目标语言,Pascal语言,COBOL语言,并支持函数式编程和逻辑编程语言的水星,等等。和GCC不再仅仅是GNU C编译器的意义,但对GNU编译器集合,是那个意思,GNU编译器家族。另一方面,当涉及到操作系统平台和硬件平台的GCC的支持,它就是一个字:无所不在。2简单的汇编
示例程序如下所示:
/ /测试。C #包括int main(void){ printf(Hello World!))返回0;}
这个程序,编译指令的一个步骤是:
GCC测试
从本质上讲,编译过程分为四个阶段,即预处理(也称预编译、预处理)、编译(编译)、编译(汇编)和连接(链接)。
2.1预处理
测试。
测试的输出。我的文件可以存储在预处理后的代码的test.c.open测试。我的文件,看它,看它。下一个指令是输出的代码直接在命令行窗口。
- GCC E选项使编译器预处理后输出的预处理结果停止。在这种情况下,预处理的结果是将一个内容。h文件到测试C.
2.2编译汇编代码(编译)
经过预处理后,生成的测试i文件可以直接编译,生成汇编代码。
测试。
GCC的s选项表明,在编译程序时,在生成汇编代码之后,停止输出输出程序集代码文件。
2.3汇编程序(汇编)
前一节汇编代码文件,s,s,负责目标文件编译器的气体汇编器,如下所示:
测试。
2.4连接(链接)
GCC连接器是由气体提供的,它将程序的目标文件连接到所需的所有目标文件,最后生成一个可执行文件。
对于最后一节生成的测试O,将其连接到C标准输入和输出库,并最终生成程序测试。
GCC测试
在命令行窗口中,执行,测试,让它说HelloWorld!
汇编3多个程序文件
通常整个程序由多个源文件,和多个编译单元形成相应的,和GCC可以用来管理这些编译单元,假设有一个由Test1两个源文件的程序。C和test2 C.为了编译,并最终生成可执行程序的测试,你可以使用下面的命令。
GCC test1,test2 C。C O试验
如果同时处理多个文件,GCC仍按预处理、编译和链接的过程依次进行,如果深入研究,上述命令大致相当于依次执行以下三个命令:
gcc的C、C O C。test1.ogcc test2。C O test2.ogcc test1,test2。O O
4错误检测
海合会- illcode C O illcode迂腐。
非学究式的编译选项不能保证所编制的程序是完全符合ANSI / ISO C标准。它不仅可以帮助Linux程序员更接近这一目标。换句话说,非学究式的选项可以帮助程序员发现一些不符合ANSI / ISO标准C代码,但不是全部,事实上,只有ANSI / ISO C语言标准要求编译器诊断,可能是发现并警告GCC。
除了-迂腐,GCC编译选项,有一些也可以产生有用的警告信息。大多数选项都开始与W,其中最有价值的是墙,用它使GCC警告信息尽可能多的。
GCC壁illcode。C O illcode
由GCC警告消息不能在严格意义上的错误,但它很可能是生活的地方。一个好的Linux程序员应该尽量避免警告信息保持编码标准和稳健的。因此是治疗预警信息作为编码误差的一个可靠的行为!所以当Werror选项应用于编译器,GCC将停止所有的报警点编制,强迫程序员修改代码。
GCC - Werror C O试验测试。
5库文件连接
在开发软件时,不使用第三方函数库是比较少见的。一般来说,多功能图书馆需要支持来完成相应的功能。从程序员的角度来说,实际上是一个数的函数库的头文件。H)和库(所以,自由,或DLL)在大多数的Linux功能将在/ usr /包括 /目录下有默认的标题,并在/ usr / lib库文件/文件夹;使用Windows库文件在视觉stido目录下的include和lib,和系统文件夹。但有时,我们会使用图书馆不再是目录,所以GCC编译时必须以自己的方式找到所需要的头文件和库文件。
例如,我们的测试。C程序是用C连接到MySQL在Linux,这个时候我们需要去官方网站下载的MySQL连接MySQL的C库,下载解压后,有一个包括文件夹,其中包含MySQL连接器头文件和lib文件夹,其中包含一个二进制文件libmysqlclient.so
在inclulde文件夹的路径是/ usr / dev / MySQL /包括,和lib文件夹 / usr / dev / MySQL / lib
5.1编译成可执行文件
首先,我们必须把C作为目标文件编译,这个时间需要执行。
GCC ndash;C ndash;我/ usr / dev / MySQL /包括测试。C—O;O试验。
5.2链接
最后,我们将所有目标文件链接到可执行文件中:
GCC ndash;L / usr / dev / MySQL / lib ndash;lmysqlclient O—O测试;测试。
Linux下的库文件分为两大类,即动态链接库(的usually.the端)和静态链接库(usually.at的结束),两者的区别只是所需要的代码在程序执行是在运行时动态加载,或是在静态加载编译时间。
5.3在强制链接时使用静态链接库
默认情况下,GCC在链接时首先使用动态链接库。只有在动态链接库不存在时,才考虑静态链接库。如果需要,可以在编译时添加静态选项,静态链接库是必需的。
在/ usr / dev / MySQL / lib目录,有库文件,需要libmysqlclient.so libmysqlclient链接时。为了使GCC在链接时使用静态链接库,可以使用以下命令。
GCC ndash;L / usr / dev / MySQL / lib ndash;静态ndash;lmysqlclient O—O测试;测试。
静态库链接中的搜索路径顺序:
1。LD将在GCC命令中查找参数l。
2。为GCC找到环境变量library_path
三.然后找到内部目录 / / / lib库目录 / usr /局部/库,这是当时写在程序编译GCC
动态链接和执行时间的搜索路径序列:
1。在编译目标代码时指定的动态库搜索路径。
2。2指定的动态库搜索路径。环境变量
3中指定的动态库搜索路径。配置文件 / / ld.so.conf等
4。默认动态库搜索路径
5。默认的动态库搜索路径 / usr / lib
环境变量:
library_path环境变量:指定程序的静态链接库文件的搜索路径
ld_library_path环境变量:指定程序的动态链接库文件的搜索路径