Linux平台编程必须知道的GCC编译器格式 (linux gcc 格式)

在Linux平台下进行C/C++语言编程,GCC编译器是必不可少的。本文将介绍GCC编译器的基本格式及其常见选项,以便初学者快速上手。

GCC编译器

GCC(GNU Compiler Collection)是GNU计划下开发的一套免费的编程语言编译器,支持多种语言(包括C、C++、Objective-C、Java等)的编译。

GCC编译器的基本格式:gcc [选项] 文件名

其中选项可以包含以下内容:

1. 编译选项

-c:仅编译源文件,生成目标文件。

-g:在目标文件中生成调试信息,便于调试。

-O:优化选项,可设置多个优化级别:-O0、-O1、-O2、-O3、-Os等。

-Wall:启用所有警告信息。

-Werror:将警告信息视为错误,终止编译过程。

2. 链接选项

-l库名:链接指定的库文件。

-L库目录:指定库目录,链接库文件。

-static:静态链接库文件。

-shared:动态链接库文件。

3. 其他选项

-o 输出文件名:指定输出文件名。

-I头文件目录:指定头文件目录,以便编译器找到需要的头文件。

-D定义符号:定义宏或变量,以便在程序中使用。

预处理选项:-E、-M、-MM、-MF、-MG、-MP等。

示例:

1. 编译单个源文件

gcc -c mn.c // 仅编译mn.c文件,生成目标文件mn.o

gcc -Wall -g -c test.c // 编译test.c文件,并生成调试信息和所有警告信息

2. 链接目标文件

gcc -o program mn.o test.o // 链接mn.o和test.o文件,生成可执行文件program

gcc -o program mn.cpp test.cpp // 链接mn.cpp和test.cpp文件,生成可执行文件program

3. 链接静态库

gcc -static -o program mn.o -ltest // 链接静态库文件libtest.a,并生成可执行文件program

gcc -static -o program mn.o -L./lib -ltest // 指定库目录为当前目录下的lib目录,链接静态库文件libtest.a,并生成可执行文件program

4. 链接动态库

gcc -shared -o libtest.so test.o // 生成动态库libtest.so

gcc -o program mn.o -ltest // 链接动态库libtest.so,并生成可执行文件program

本文介绍了Linux平台下C/C++语言编程必须知道的GCC编译器格式及其常用选项。新手可以通过这些基本知识快速上手,并在实践中不断深入了解和使用,提高编程效率和质量。

相关问题拓展阅读:

如何用GCC在linux下编译C语言程序

有以下步骤:

  1.源程序的编译

    在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器. 下面

  我们以一个实例来说明如何使用gcc编译器.

  假设我们有下面一个非常简单的源程序(hello.c):

  int main(int argc,char **argv)

  {

  printf(“Hello Linux\n”);

  }

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

  gcc -o hello hello.c

    gcc 编译器就会为我们生成一个hello的可执行文件.执行./hello就可以看到程

  序的输出结果了.命令行中 gcc表示我们是用gcc来编译我们的源程序,-o 选项表示

  我们要求编译器给我们输出的可执行文件名为hello 而hello.c是我们的源程序文件.

    gcc编译器有许多选项,一般来说我们只要知道其中的几个就够了. -o选项我们

  已经知道了,表示我们要求输出的可执行文件名. -c选项表示此慧我们只要求编译器输出

  目标代码,而不必要输出可执行文件. -g选项拍扒差表示我们要求编译器在编译的时候提

  供我们以后对程序进行调试的信息.

    知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了,如果你

  想要知道更多的选项,可以查看gcc的帮助文档,那里有着许多对其它选项的详细说

  明.

  2.Makefile的编写

  假设我们有下面这样的一个程序,源代码如下袭皮:

  

  #include “mytool1.h”

  #include “mytool2.h”

  int main(int argc,char **argv)

  {

  mytool1_print(“hello”);

  mytool2_print(“hello”);

  }

  

  #ifndef _MYTOOL_1_H

  #define _MYTOOL_1_H

  void mytool1_print(char *print_str);

  #endif

  

  #include “mytool1.h”

  void mytool1_print(char *print_str)

  {

  printf(“This is mytool1 print %s\n”,print_str);

  }

  

  #ifndef _MYTOOL_2_H

  #define _MYTOOL_2_H

  void mytool2_print(char *print_str);

  #endif

  

  #include “mytool2.h”

  void mytool2_print(char *print_str)

  {

  printf(“This is mytool2 print %s\n”,print_str);

  }

  当然由于这个程序是很短的我们可以这样来编译

  gcc -c main.c

  gcc -c mytool1.c

  gcc -c mytool2.c

  gcc -o main main.o mytool1.o mytool2.o

    这样的话我们也可以产生main程序,而且也不时很麻烦.但是如果我们考虑一

  下如果有一天我们修改了其中的一个文件(比如说mytool1.c)那么我们难道还要重

  新输入上面的命令?也许你会说,这个很容易解决啊,我写一个SHELL脚本,让她帮我

  去完成不就可以了.是的对于这个程序来说,是可以起到作用的.但是当我们把事情

  想的更复杂一点,如果我们的程序有几百个源程序的时候,难道也要编译器重新一

  个一个的去编译?

    为此,聪明的程序员们想出了一个很好的工具来做这件事情,这就是make.我们

  只要执行以下make,就可以把上面的问题解决掉.在我们执行make之前,我们要先

  编写一个非常重要的文件.–Makefile.对于上面的那个程序来说,可能的一个

  Makefile的文件是:

  # 这是上面那个程序的Makefile文件

  main:main.o mytool1.o mytool2.o

  gcc -o main main.o mytool1.o mytool2.o

  main.o:main.c mytool1.h mytool2.h

  gcc -c main.c

  mytool1.o:mytool1.c mytool1.h

  gcc -c mytool1.c

  mytool2.o:mytool2.c mytool2.h

  gcc -c mytool2.c

    有了这个Makefile文件,不过我们什么时候修改了源程序当中的什么文件,我们

  只要执行make命令,我们的编译器都只会去编译和我们修改的文件有关的文件,其

  它的文件她连理都不想去理的.

    下面我们学习Makefile是如何编写的.

    在Makefile中也#开始的行都是注释行.Makefile中最重要的是描述文件的依赖

  关系的说明.一般的格式是:

  target: components

  TAB rule

    之一行表示的是依赖关系.第二行是规则.

    比如说我们上面的那个Makefile文件的第二行

  main:main.o mytool1.o mytool2.o

    表示我们的目标(target)main的依赖对象(components)是main.o mytool1.o

  mytool2.o 当倚赖的对象在目标修改后修改的话,就要去执行规则一行所指定的命

  令.就象我们的上面那个Makefile第三行所说的一样要执行 gcc -o main main.o

  mytool1.o mytool2.o 注意规则一行中的TAB表示那里是一个TAB键

  Makefile有三个非常有用的变量.分别是$@,$^,$~/sin 命令,然后看~/sin

  文件,到那里面去找了. 在sin文件当中,我会找到这样的一行libm-2.1.2.so:00009fa0

  W sin 这样我就知道了sin在 libm-2.1.2.so库里面,我用 -lm选项就可以了(去掉前面

  的lib和后面的版本标志,就剩下m了所以是 -lm).

  

  4.程序的调试

    我们编写的程序不太可能一次性就会成功的,在我们的程序当中,会出现许许

  多多我们想不到的错误,这个时候我们就要对我们的程序进行调试了.

    最常用的调试软件是gdb.如果你想在图形界面下调试程序,那么你现在可以选

  择xxgdb.记得要在编译的时候加入 -g选项.关于gdb的使用可以看gdb的帮助文件.由

  于我没有用过这个软件,所以我也不能够说出如何使用. 不过我不喜欢用gdb.跟踪

  一个程序是很烦的事情,我一般用在程序当中输出中间变量的值来调试程序的.当

  然你可以选择自己的办法,没有必要去学别人的.现在有了许多IDE环境,里面已经自

  己带了调试器了.你可以选择几个试一试找出自己喜欢的一个用.

  

  5.头文件和系统求助

    有时候我们只知道一个函数的大概形式,不记得确切的表达式,或者是不记得函数在那个头文件进行了说明.这个时候我们可以求助系统,比如说我们想知道fread这个函数的确切形式,我们只要执行 man fread 系统就会输出着函数的详细解释的.和这个函数所在的头文件说明了。如果我们要write这个函数说明,当我们执行man write时,输出的结果却不是我们所需要的。因为我们要的是write这个函数的说明,可是出来的却是write这个命令的说明。为了得到write的函数说明我们要用man 2 write。2表示我们用的是write这个函数是系统调用函数,还有一个我们常用的是3表示函数是c的库函数。

在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器,假设我们有下面一个非常简单的源程序(hello.c):

int main(int argc,char **argv)

{

printf(“伍巧Hello Linux\n”);

}

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

gcc -o hello hello.c

gcc 编译器就会为我们生成一个hello的可执行文件.执行./hello就可以看到程

序的输出结果了

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

Linux操作系统诞生于1991 年10 月5 日(这是之一次正式渣春向外公布时间)。如橘耐Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。

回复在linux下怎么编译C程序:比如C程序保存为helloworld.c# gcc -o helloworld helloworld.c 这一步把helloworld.c编译成可执行的二进制文件helloworld,这里不一定要和C程序的名字一样,可以是盯让其它名字.然后执行该程序:# ./hellogcc 编译器有许多选项,一般来说我们只要知道其中的几个就够了。-o 选项我们已经知道了空誉,表示我们要求输出的可执行文件名。 -c 选项表示我们只要求编译器凯亏局输出目标代码,而不必要输出可执行文件。-g 选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息。

假如你的C程序名为main.c ,在/home/linux 下

打开终端

使用cd 命令进入到main.c 所在的文件夹内: cd /home/linux

然后使用gcc命令编译mian.c 程序 : gcc mian.c

编毁烂译通过后纤消漏,再输入:桥派 ./a.out

就可以运行你的程序

gcc –help命令,可以查看所有gcc支持的命令选项

linux gcc 格式的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linux gcc 格式,Linux平台编程必须知道的GCC编译器格式,如何用GCC在linux下编译C语言程序的信息别忘了在本站进行查找喔。


数据运维技术 » Linux平台编程必须知道的GCC编译器格式 (linux gcc 格式)