gcc在命令行上经常使用的几个选项是:
-c 只预处理、编译和汇编源程序,不进行连接。编译器对每一个源程序产生一个目标文件。
-o file 确定输出文件为file。如果没有用-o选项,缺省的可执行文件的输出是a.out,目标文件和汇编文件的输出对source.suffix分别是source.o和source.s,预处理的C源程序的输出是标准输出stdout。
-Dmacro或-Dmacro=defn 其作用类似于源程序里的#define。例如:% gcc -c -DHAVE_GDBM -DHELP_FILE=\"help\" cdict.c其中第一个- D选项定义宏HAVE_GDBM,在程序里可以用#ifdef去检查它是否被设置。第二个-D选项将宏HELP_FILE定义为字符串“help”(由于反斜线的作用,引号实际上已成为该宏定义的一部分),这对于控制程序打开哪个文件是很有用的。
-Umacro 某些宏是被编译程序自动定义的。这些宏通常可以指定在其中进行编译的计算机系统类型的符号,用户可以在编译某程序时加上 -v选项以查看gcc缺省定义了哪些宏。如果用户想取消其中某个宏定义,用-Umacro选项,这相当于把#undef macro放在要编译的源文件的开头。
-Idir 将dir目录加到搜寻头文件的目录列表中去,并优先于在gcc缺省的搜索目录。在有多个-I选项的情况下,按命令行上-I选项的前后顺序搜索。dir可使用相对路径,如-I../inc等。
-O 对程序编译进行优化,编译程序试图减少被编译程序的长度和执行时间,但其编译速度比不做优化慢,而且要求较多的内存。
-O2 允许比-O更好的优化,编译速度较慢,但结果程序的执行速度较快。
-g 产生一张用于调试和排错的扩展符号表。-g选项使程序可以用GNU的调试程序GDB进行调试。优化和调试通常不兼容,同时使用-g和-O(-O2)选项经常会使程序产生奇怪的运行结果。所以不要同时使用-g和-O(-O2)选项。
-fpic或-fPIC 产生位置无关的目标代码,可用于构造共享函数库。
以上是gcc的编译选项。gcc的命令行上还可以使用连接选项。事实上,gcc将所有不能识别的选项传递给连接程序ld。连接程序ld将几个目标文件和库程序组合成一个可执行文件,它要解决对外部变量、外部过程、库程序等的引用。但我们永远不必要显式地调用ld。利用gcc命令去连接各个文件是很简单的,即使在命令行里没有列出库程序,gcc也能保证某些库程序以正确的次序出现。
gcc的常用连接选项有下列几个:
-Ldir 将dir目录加到搜寻-l选项指定的函数库文件的目录列表中去,并优先于gcc缺省的搜索目录。在有多个-L选项的情况下,按命令行上-L选项的前后顺序搜索。dir可使用相对路径。如-L../lib等。
-lname 在连接时使用函数库libname.a,连接程序在-Ldir选项指定的目录下和/lib,/usr/lib目录下寻找该库文件。在没有使用-static选项时,如果发现共享函数库libname.so,则使用libname.so进行动态连接。
-static 禁止与共享函数库连接。
-shared 尽量与共享函数库连接。
这是Linux上连接程序的缺省选项。下面是一个使用gcc进行连接的例子:
引用
% gcc -o prog main.o subr.o -L../lib -lany -lm
分享到:
相关推荐
【GCC编译C程序】是Linux环境中开发C语言软件的核心环节。GNU编译器集(GCC),最初称为GNU C编译器,由Richard Stallman在1987年发起,旨在构建符合自由软件理念的编译器,用于构建GNU项目中的其他软件。GCC很快因...
Linux 驱动程序编译和应用程序编译 Linux 驱动程序编译是指将驱动程序源代码编译成可加载到 Linux 内核的模块,以便控制和管理硬件设备。编译过程中需要使用交叉编译器 arm-linux-gcc,将驱动程序编译成模块并安装...
对于初学者或专业人士而言,掌握如何在Linux环境下使用gcc编译C程序是至关重要的。下面我们将详细探讨这个过程及其相关知识点。 首先,要开始编译C程序,你需要确保你的Linux系统已经安装了GCC。你可以通过运行`gcc...
本主题将深入探讨如何在Linux下有效地编译和链接多个C程序,并结合`makefile`来自动化这个过程。 首先,理解C程序的编译和链接是至关重要的。编译是将源代码(`.c`文件)转换为中间目标代码(`.o`文件)的过程,而...
`build-essential`是一个包含了一系列基础编译工具的软件包,它包括了GCC(GNU Compiler Collection)和Make等,这些都是在Linux环境下编译C语言程序所必需的。在Deepin系统中,你可以通过打开终端并输入以下命令来...
" Linux下C语言程序开发详解" 本资源主要讲解了 Linux 下 C 语言程序开发的基础知识和基本概念。课程的主要内容包括 Linux 操作系统和 C 语言简介、Linux 下 C 语言程序开发的基础知识、虚拟机的使用、基本开发过程...
GCC主要用于编译C语言程序,而G++则专门用于编译C++程序。 要安装这些编译工具,可以使用Linux发行版自带的包管理器。例如,在基于Debian的发行版(如Ubuntu)中,可以通过以下命令安装: ```bash sudo apt-get ...
在Linux环境下,编译程序通常有三种主要方式:直接使用GCC编译器、利用Make工具以及使用特定的构建系统如Autotools或CMake。下面将详细解释这三种方法。 ### 1. GCC编译器 GCC(GNU Compiler Collection)是Linux...
本文将详细介绍如何在Linux环境下编写、编译和运行C语言程序。 首先,你需要一个文本编辑器来创建C程序。在示例中提到了`vi`编辑器,但也可以使用其他如`nano`或`gedit`等更友好的文本编辑器。例如,你可以通过以下...
主要是Linux系统中如何编译C程序,实现对linux内核的掌控与增加系统调用。
Linux 下 C 语言使用、编译与调试 Linux 是一个开源的操作系统,广泛应用于服务器、嵌入式系统和个人电脑等领域。作为一个程序员,熟悉 Linux 下的 C 语言开发环境是非常重要的。本资源将引导读者学习如何使用 vi ...
Cython 文件在 window 与 linux 下的编译指导 Cython 文件在 window 与 linux 下的编译指导是指在不同的操作系统平台上编译 Cython 文件的指导。Cython 是一种高级语言,可以将 Python 代码编译成 C 代码,然后再...
本文将深入探讨如何在Linux环境下编译程序,包括使用GCC(GNU Compiler Collection)编译器、GDB调试工具以及相关的编译步骤。 首先,让我们了解一下GCC。GCC是GNU项目的一部分,它提供了C、C++、Objective-C、...
在Linux环境中,主要使用GNU的`gcc`编译器来编译C语言程序。`gcc`是一个功能强大的编译器,支持多种编程语言,包括C、C++等,并且提供了丰富的选项供开发者使用。 **示例**: 以一个简单的“Hello World”程序为例:...
学习一门语言程序,本人觉得还是得学习它的编译规则,现在,通过小例子小结下自己对C编译的认识。 /*test.c 了解C程序的编译*/ #include int main(void) { printf(Hello World!\n); return 0; } 对于test.c,...
在Linux环境下,编写和编译程序是开发过程中的基础步骤。本教程主要涵盖了三种常见的编译方式:使用gcc命令、利用make工具以及通过makefile进行自动化编译。 1. **GCC编译** GCC(GNU Compiler Collection)是...
在Linux环境下,编写和编译程序是开发过程中的重要步骤。本PPT主要介绍了三种编译程序的方法:使用gcc命令、使用make工具以及更高级的makefile管理。下面将详细阐述这三种方式。 1. gcc命令编译 gcc是GNU Compiler ...
本篇文章将详细探讨这两个方面,并以`pstack`工具为例,介绍如何在Linux环境下进行程序的编译与调试。 首先,让我们来理解一下编译过程。在Linux下,最常用的编译器是GCC(GNU Compiler Collection)。当编写好C或...
Linux 下使用 CodeBlocks 交叉编译 ARM-LINUX-GCC 程序 在这个资源中,我们将学习如何使用 CodeBlocks 在 Linux 平台下交叉编译 ARM-LINUX-GCC 程序。交叉编译是一种在不同的平台之间编译代码的技术,能让开发者在...