免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 831 | 回复: 0
打印 上一主题 下一主题

Linux下C编程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-18 10:18 |只看该作者 |倒序浏览

                                               

  Normal
  0
  
  7.8 磅
  0
  2
  
  false
  false
  false
  
   
   
   
   
   
   
   
   
   
   
   
   
  
  MicrosoftInternetExplorer4



st1\:*{behavior:url(#ieooui) }
/* Style Definitions */
table.MsoNormalTable
        {mso-style-name:普通表格;
        mso-tstyle-rowband-size:0;
        mso-tstyle-colband-size:0;
        mso-style-noshow:yes;
        mso-style-parent:"";
        mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
        mso-para-margin:0cm;
        mso-para-margin-bottom:.0001pt;
        mso-pagination:widow-orphan;
        font-size:10.0pt;
        font-family:"Times New Roman";
        mso-fareast-font-family:"Times New Roman";
        mso-ansi-language:#0400;
        mso-fareast-language:#0400;
        mso-bidi-language:#0400;}
Linux下C编程
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GNU CC简称(GCC)       交叉平台编译器
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
GCC编译流程
·预处理(Pre-Processing)
·编译(Compiling)
·汇编(Aessembling)
·链接(Linking)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
C 源代码
[root@gxzhong ~]# rpm -qa gcc
gcc-3.4.6-3

[root@gxzhong ~]# cat hello.c
# include
int main ()
{
printf("hello \n");
return 0;
}

[root@gxzhong ~]# ll
total 16
drwxr-xr-x  2 root root 4096 May 18 11:39 Desktop
-rw-r--r--
1 root root   65 Jun  6 00:50 hello.c

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
·预处理阶段
在该阶段,编译器把源代码中的stdio.h
编译进来,并且用户可以使用Gcc的选项 –E 进行查看,该选项的作用是让Gcc 在预处理结束后停止编译过程
+++++++++++++++++++++++++++++++++++++++++++
[root@gxzhong ~]# gcc hello.c
[root@gxzhong ~]# ls
a.out  Desktop  hello
hello.c  hello.i  hello.o
hello.s
缺省生成 编译文件.out
+++++++++++++++++++++++++++++++++++++++++++

[root@gxzhong ~]# gcc -E hello.c -o hello.i
选项 -o 表示目标文件 “ .i ” 文件为已经经过预处理的C原始程序

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


·编译阶段
Gcc 首先检查代码的规范性、是否有语法错误等,以确定代码实际要做的工作,在检查无误后,Gcc 把代码翻译成汇编语言。用户可以使用 –S 选项来进行查看,该选项只进行编译不进行汇编,生成汇编代码。
[root@gxzhong ~]# gcc -S hello.i  -o hello.s
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
·汇编阶段
汇编阶段就是把编译生成的“.s
”文件转成目标文件 使用“-c”
选项可以看到汇编代码已转化为“.o ”的2进制目标文件
[root@gxzhong ~]# gcc -c hello.s -o hello.o
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
·链接阶段
在成功编译后,就进入了链接阶段了。
系统把这些(printf)函数的实现都被做到名为libc.so.6的库文件中 没有特别指定,Gcc 默认会到 /usr/lib 下查找libc.so.6 库函数,这就是链接的作用。

函数库包括静态库和动态库
静态库是指在编译链接时,把库文件的代码全部加入可执行文件中,生成的文件比较大,但在运行时也就不需要库文件了。其后缀名一般为
“.a ”

动态库与之相反,在编译链接时,并没有把库文件的代码加入到可执行文件中,而是在程序运行时由运行时链接文件加载库,这样可以节省系统开销。动态库后缀名一般为
“.so”

[root@gxzhong ~]# gcc hello.o -o hello
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
完成链接后,Gcc 就可以生成可执行文件
[root@gxzhong ~]#
ls                                                                                             
bkhello.c
Desktop  hello  hello.c
hello.i  hello.o  hello.s
install
[root@gxzhong ~]# ./hello
hello
[root@gxzhong ~]#
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-c 只是编译不链接,生成目标文件“.o ”
-S 只是编译不汇编,生成汇编代码
-E只进行预编译,不做其他处理
-g 在可执行文件中包含标准调试信息
-o file 把输出文件输出到file里
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Linux_C
[root@gxzhong ~]# gcc -E hello.c -o hello.i
[root@gxzhong ~]# gcc -S hello.i  -o hello.s
[root@gxzhong ~]# gcc -c hello.s -o hello.o
[root@gxzhong ~]# gcc hello.o -o hello



               
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/81880/showart_1327735.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP