广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 29585 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
dup88415 手机
个人头像
个人文章 个人相簿 个人日记 个人地图
初露锋芒
级别: 初露锋芒 该用户目前不上站
推文 x0 鲜花 x9
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
文章表情[Linux] GCC使用简介
最近在学linux,业一边学习GCC/G++的使用,下面是我在网路上找到的一些资料,提供参考~
另外要在linux下使用GCC/G++,要先会使用一些基本VI的操作,请参考教学区喔~ 表情
-----------------------------------------------------------------------------------------------------------------------------------
GCC 的使用
简介:
GCC 是由 GNU 出的 C 语言编译器,可将由 ANSI C 或 traditional C 语言写成的程式码编译成可执行档。由于 GCC 能分别编译出可执行于许多不同硬体、作业系统下的程式,在 UNIX 系统上是相当多人常用的 C 语言编译程式。
使用方法简介

基本的使用方法及常用指令
前言
编译器在编译过程中,先将程式码编译成 object 档,然后再和程式库联结,成为可执行档。故一个编译器须提供的参数主要有几类:
指定编译器编出的 object 档或是可执行档档名。
在编译过程做最佳化,可提升程式的执行速度。
设定搜寻程式库的标头档 (header file) 及程式库档的目录及指定程式库档档名。
提供进一步的资讯以便使用者找寻程式中的错误。
以下便以这四个大类分别介绍。
注意:下面在不同类别中所介绍的参数,几乎都可以混合着使用。

设定编译出的 object 档档名或是可执行档档名:
参数: -o out_put_filename
说明: 指定编译出的档名为 out_put_filename。

范例: 本例将程式码 'test.c' 编译成可执行档,并设定档名为 'test'。

gcc test.c -o test

在编译过程做最佳化
参数: -O
说明: 在编译过程做最佳化,以提升增快程式执行速度。

范例:本例将程式码 'test.c' 编译成可执行档 'test',并在编译过程做最佳化'。

gcc -O test.c -o test

设定搜寻标头档目录、程式库档的目录及指定程式库档。

设定搜寻标头档目录
参数: -Idir_name
说明: 将目录 'dir_name' 设定为搜寻标头档目录之一。


设定搜寻程式库目录。
参数: -Ldir_name
说明: 将目录 'dir_name' 设定为搜寻程式库目录之一。


设定程式库档案。

参数: -lname
说明: 联结程式库 libname.a 。

范例一:本例中假设你的程式档名为test.c,数学函数如 sin等,所要联结的程式库为 libm.a。

gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test

范例二:本例中假设你的程式档名为 test.c,使用到 X window 函数,所需的 include 档放在 /usr/X11R6/include 中,所须联结的程式库放在 /usr/X11R6/lib,所要联结的程式库为 libX11.a。
gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test

提供进一步的资讯以便使用者找寻程式中的错误。
参数: -Wall

说明: 输出较多的警告讯息,以便找出程式的错误。

范例: 编译 test.c 时输出较多的警告讯息。

gcc -Wall test.c

参数: -g

说明: 在编译出可执行档时,附加执行时除错资讯,以供 gdb 读取 (若要使用 ABSoft 的除错程式,则须将参数改为 -gdwarf )。

范例: 将 'test.c' 编译成可执行档 'test',并附加除错资讯。

gcc -g test.c -o test



进阶参数
1. 仅编译成 object 档。
参数: -c

说明: 仅编译成 object 档而不进行程式库联结。

范例: 将 test.c 编译成 object 档 test.o。

gcc -c test.c -o test.o

2. 联结数个 object 成可执行档。

范例: 将 'test1.o'、'test2.o' 和程式库联结后成为可执行档 test。

gcc test1.o test2.o -o test

3. 观察巨集展开情形:

参数: -E

说明:展开程式中的巨集以便了解巨集是否依照预期方式展开。

范例:将 test1.c 中的巨集展开后储存到 test1.c.ext 。

gcc -E test1.c > test1.c.ext

4. 产生组合语言程式码:

参数: -S

范例:编译 test.c 产生对应的组合语言程式码档 test.s。

gcc -S test.c -o test.s

编译参数列表 -o out_put_filename 将编译后产生的档名设为 out_put_filename
-O 编译时做最佳化,以增加程式执行效率。
-c 将原始语言编译成 .o 档(object档) 不做程式库连结的工作。
-g 编译出 .o 档时,保留除错的资讯,在连结后产生的可执行档中包含 gdb 需要的资讯。(若要给 ABSoft 的除错程式使用,须将此参数改为 -gdwarg )
-E 将原始语言编译将 test.c 中的巨集展开,之后输出到 stdout。
-L/usr/X11R6/lib 连结程式时,搜寻程式库档时,将 /usr/X11R6/lib 列入搜寻目录。
-lm 在连结程式时,将 libm.a 列入搜寻档案中。
-I/usr/X11R6/include 到 /usr/X11R6/include 找寻被 include 的档案。
-S 产生 test.c 对应的组合语言程式档 test.s 。
-Wall 产生比较多的警告讯息 (平常不须使用,但当找不到程式中的错误时,可以加以使用。)



快速入门


范例:将 test.c 编译成可执行档 test 并在编译过程中做最佳化。

gcc -O test.c -o test

范例: 将 test1.c 和 test2.c 编译联结成可执行档 test 并在编译过程中做最佳化。

gcc -O test1.c test2.c -o test


范例:若程式中有使用数学函数如 sin 等,编译时须加入 -lm 。

gcc -O test.c -o test -lm

范例:发现程式有执行时错误,编译后需用 GDB 除错。

gcc -O -g test.c -o test

范例:发现程式有执行时错误,编译后要跟 ABSoft F77 联结后以 ABSoft 的除错程式除错。
gcc -O -gdwarf test.c -o test


更多的说明
man gcc
info gcc

-------------------------------------
看下面的例子:test.c

#include<stdio.h>

main()

{ char *str="I like Linux! I advices you jion in the Linux World";

  printf("%s\n",str);

  exit(0);

}

使用gcc编译。输入gcc -c test.c得到目标文件test.o.-c命令表示对文件进行编译和汇编。但并不连接。如果再健入gcc -o ../bin/test test.o,那么将得到名为test的可执行文件。其实这两不可以一气呵成,gcc ../bin/test test.c.如果程序没有错误救生成了可执行文件。也许你会觉得基于命令行的编译器比不上如VC之类的集成开发环境,的确gcc的界面要改进,但是你一旦熟练了就会感到。gcc的效率如此之高。可以告诉大家的是Linux底下强大的C/C++集成开发环境Kdevelope和Vc一样强大,使用了Gcc编译器。


[ 此文章被andyz在2005-05-18 20:05重新编辑 ]



当自己下载时,会感谢种子大大~
当自己做种时,会受下载人祝福~
所以~分享越多就会越幸福~
献花 x0 回到顶端 [楼 主] From:台湾数位联合 | Posted:2005-03-12 01:09 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.056179 second(s),query:15 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言