一、运行
gcc/egcs
Linux
中最重要的软件开发工具是
GCC
。
GCC
是
GNU
的
C
和
C++
编译器。实际上,
GCC
能够编译三种语言:
C
、
C++
和
ObjectC
(
C
语言的一种面向对象扩展)。利用
gcc
命令可同时编译并连接
C
和
C++
源程序。
#DEMO#: hello.c
如果你有两个或少数几个
C
源文件,也可以方便地利用
GCC
编译、连接并生成可执行文件。例如,假设你有两个源文件
main.c
和
factorial.c
两个源文件,现在要编译生成一个计算阶乘的程序。
清单
factorial.c
#include
#include
int factorial (int n)
{
if (n <= 1)
return 1;
else
return factorial (n - 1) * n;
}
|
清单
main.c
#include
#include
int factorial (int n);
int main (int argc, char **argv)
{
int n;
if (argc < 2) {
printf ("Usage: %s n ", argv [0]);
return -1;
}
else {
n = atoi (argv[1]);
printf ("Factorial of %d is %d. ", n, factorial (n));
}
return 0;
}
|
利用如下的命令可编译生成可执行文件,并执行程序:
$ gcc -o factorial main.c factorial.c
$ ./factorial 5
Factorial of 5 is 120.
|
GCC
可同时用来编译
C
程序和
C++
程序。一般来说,
C
编译器通过源文件的后缀名来判断是
C
程序还是
C++
程序。在
linux
中,
C
源文件的后缀名为
.c
,而
C++
源文件的后缀名为
.C
或
.cpp
。
但是,
gcc
命令只能编译
C++
源文件,而不能自动和
C++
程序使用的库连接。因此,通常使用
g++
命令来完成
C++
程序的编译和连接,该程序会自动调用
gcc
实现编译。
假设我们有一个如下的
C++
源文件(
hello.C
):
#include
void main (void)
{
cout << "Hello, world!" << endl;
}
|
则可以如下调用
g++
命令编译、连接并生成可执行文件:
$ g++ -o hello hello.C
$ ./hello
Hello, world!
|
二、
gcc/egcs
的主要选项
-ansi
只支持
ANSI
标准的
C
语法。这一选项将禁止
GNU C
的某些特色,例如
asm
或
typeof
关键词。
-c
只编译并生成目标文件。
-DMACRO
以字符串
“1”
定义
MACRO
宏。
-DMACRO=DEFN
以字符串
“DEFN”
定义
MACRO
宏。
-E
只运行
C
预编译器。
-g
生成调试信息。
GNU
调试器可利用该信息。
-IDIRECTORY
指定额外的头文件搜索路径
DIRECTORY
。
-LDIRECTORY
指定额外的函数库搜索路径
DIRECTORY
。
-lLIBRARY
连接时搜索指定的函数库
LIBRARY
。
-m486
针对
486
进行代码优化。
-o FILE
生成指定的输出文件。用在生成可执行文件时。
-O0
不进行优化处理。
-O
或
-O1
优化生成代码。
-O2
进一步优化。
-O3
比
-O2
更进一步优化,包括
inline
函数。
-shared
生成共享目标文件。通常用在建立共享库时。
-static
禁止使用共享连接。
-UMACRO
取消对
MACRO
宏的定义。
-w
不生成任何警告信息。
-Wall
生成所有警告信息。