赛迪网技术社区 » Linux » LINUX下C的编译 转到动态网页
--> 本页主题: LINUX下C的编译 返回 | 悬赏 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题
highill

头衔:梦幽树|小鱼梦幽树|小鱼

用户名: highill
级别: 论坛版主
精华: 24
发帖: 4683
经验值: 6839 点
积分: 6851 分
贡献值: 1
注册时间:2006-09-01


LINUX下C的编译


LINUX下C的编译 )32&!^u  
L<CZo5O.  
一.运行 gcc/egcs -x<Hp^=`  
Linux 中最重要的软件开发工具是 GCC。GCC 是 GNU 的 C 和 C++ 编译器。实际上,GCC能够编译三种语言:C、C++和ObjectC(C语言的一种面向对象扩展)。利用 gcc 命令可同时编译并连接 C 和 C++ 源程序。 TsO^ "W  
Cxi "[m  
#DEMO#: hello.c VAlvQkB4}  
`F~+]E- l  
如果你有两个或少数几个C源文件,也可以方便地利用GCC编译、连接并生成可执行文件。例如,假设你有两个源文件 main.c 和 factorial.c 两个源文件,现在要编译生成一个计算阶乘的程序。 cRNq0g  
(cQpK c %  
清单 factorial.c 6Uj\SZ  
----------------------- ,C e$@]]u  
#include <lN*xo 0  
#include vziZ0'Tg}  
Ts<.4cjfH2  
int factorial (int n) ^ZYmK}RI}w  
{ bT4s?ta  
if (n <= 1) x6C-4s=P  
return 1; n+a&izW,  
=@ I'l  
else Qc9 #nIF  
return factorial (n - 1) * n; C__Ha^p;YO  
} hU8T| ut!  
----------------------- =_W=kmN,  
A@c,B{Oz,  
# !<TzWc  
(8K<f[ u  
#?O/6S?  
d2;jCM.r  
----------------------- g|lt\yI  
清单 main.c bRX3zrNU  
----------------------- b.1v9V  
#include 9<gk^%Uy  
#include ,|t  t]  
{Mt][(0:  
int factorial (int n); O ({)HT>  
F/I F}Jb  
int main (int argc, char **argv) [oM76. zv  
{ Y_@KL +EZ]  
int n; AqK<WW+a  
h]H=7p  
if (argc < 2) { {7;dE5/  
printf ("Usage: %s n ", argv [0]); *I7B}\3  
return -1; BmbPq  
} kF{ClB;c  
else { nDn;bg&>7,  
n = atoi (argv[1]); m^ +2J<}go  
printf ("Factorial of %d is %d. ", n, factorial (n)); wdB|e*P*h  
} 2[K&bK7  
c[TmY>U  
return 0; =; #&H6y[)  
} 6XXA!> .p  
----------------------- !7>4oc;  
Hiia8oK  
w.+@Pa]0$  
5o;d-<-/  
c}](1dtH[  
g\&wqi=-  
利用如下的命令可编译生成可执行文件,并执行程序: Zxrc9obG  
fiM3<kCf  
$ gcc -o factorial main.c factorial.c Wk-~n%BW#  
sbM$_)5n  
$ ./factorial 5 -SF >7pm  
/adJ|mhgy  
Factorial of 5 is 120. '9ufyEV8'  
5$![L2/  
GCC 可同时用来编译 C 程序和 C++ 程序。一般来说,C 编译器通过源文件的后缀名来判断是 C 程序还是 C++ 程序。在 linux 中,C 源文件的后缀名为 .c,而 C++ 源文件的后缀名为 .C 或 .cpp。 )!`#['Nc  
2 KDIFl1k'  
但是,gcc 命令只能编译 C++ 源文件,而不能自动和 C++ 程序使用的库连接。因此,通常使用 g++ 命令来完成 C++ 程序的编译和连接,该程序会自动调用 gcc 实现编译。 '^h#PK[qI  
g<Nw!9h  
{y4c OGb  
假设我们有一个如下的 C++ 源文件(hello.C): ej+FjA%AX  
: KgR"a3{  
#include b:*O`q'y  
_ &yLsn  
void main (void) #Evg*S[  
{ "nZe$knj3p  
cout << "Hello, world!" << endl; dRNn 5fl  
} ,`Ke- +b`  
op.+}r_[  
XL:cfDX}v  
%8d"Jna  
则可以如下调用 g++ 命令编译、连接并生成可执行文件: \y\W ^Z0  
7mqtO/xsq  
$ g++ -o hello hello.C +gCpw*FBkJ  
*vv&`q U   
$ ./hello kW^1E{  
-Dr zN]  
Hello, world -wTt|4rO1  
k?BHI=^O  
二.gcc/egcs 的主要选项 ~i$Nd-64  
s2FlBXY   
-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色,例如 asm 或 typeof 关键词。 dDswW  
'z5;,  
-c 只编译并生成目标文件。 7ZF&|w  
0#8M~6lU%/  
-DMACRO 以字符串“1”定义 MACRO 宏。 1K_Tss%.  
@}$+t1f  
-DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏。 l~BHf.;\^  
}baxKdWP  
-E 只运行 C 预编译器。 L|LiH)4J>x  
B.IQ 3  
-g 生成调试信息。GNU 调试器可利用该信息。 Xw-z5RkV  
c6mZ<ND"  
-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。 YC jqCc?  
7v-=t|,e  
-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。 9B;R#Qr3  
hYDF!U:l&O  
-lLIBRARY 连接时搜索指定的函数库LIBRARY。 JDj!]EF#>  
weMAc4B  
-m486 针对 486 进行代码优化。 d Ab;  
8yJJ9Q2E  
-o FILE 生成指定的输出文件。用在生成可执行文件时。 Mb2*(NH  
$1d~Vs:P\  
-O0 不进行优化处理。 z`{>9q  
"_W_O"aU  
-O 或 -O1 优化生成代码。 -?J Je  
c1'6gF*u&  
-O2 进一步优化。 |{2EI$lf  
n.gvuFp*  
-O3 比 -O2 更进一步优化,包括 inline 函数。 pF(Pb)in  
1Q+D/_%:r  
-shared 生成共享目标文件。通常用在建立共享库时。 #DhuN? D  
-K Ru}t  
-static 禁止使用共享连接。 xH^ .$8  
nn74]-|  
-UMACRO 取消对 MACRO 宏的定义。 gbC_haX8.  
W& IU  
-w 不生成任何警告信息。 2Yupdx5  
*R0*7.n   
-Wall 生成所有警告信息。

本贴标签:
-----------------------------------------------
欢迎光临!
www.mengyoushu.com
-----------------------------------------------
欢迎光临赛迪网技术社区

赛迪网技术社区 java web
赛迪网技术社区 技术职场
赛迪网技术社区 java进阶
顶端 Posted:2006-11-08 08:35 | [楼 主]
longshao84402


用户名: longshao84402
级别: 工程师
精华: 2
发帖: 100
经验值: 104 点
积分: 115 分
贡献值: 0
注册时间:2006-07-05



我看不懂....不过顶了.....

兄弟如手足.美女如衣服.谁穿我衣服我砍他手足.
顶端 Posted:2006-11-25 00:57 | 1 楼
longshao84402


用户名: longshao84402
级别: 工程师
精华: 2
发帖: 100
经验值: 104 点
积分: 115 分
贡献值: 0
注册时间:2006-07-05




兄弟如手足.美女如衣服.谁穿我衣服我砍他手足.
顶端 Posted:2006-11-25 00:57 | 2 楼

 赛迪网技术社区 -> Linux
快速发帖 顶端
内容
HTML 代码不可用

使用签名
Wind Code自动转换

字数检查 恢复数据
按 Ctrl+Enter 直接提交
表情 [更多]