您的位置:首页 > 运维架构 > Linux

嵌入式Linux编译器gcc使用

2012-07-30 17:54 309 查看
from: http://blog.csdn.net/jyjmc/article/details/5278130

At first, GCC is used for GNU C Compiler. At present,it supports JAVA Ada C++ and so on.

 

GCC编译流程分为:

1.Pre-Processing(预处理)

   gcc -E -o hello.i hello.c
   选项-E  使得编译器在预处理结束时停止编译

   选项-o   指定GCC的输出结果

   .i/.ii       经过预处理的C/C++源程序

2.Compiling(编译)

   gcc -S -o hello.s hello.i
   选项-S   使得编译器在编译结束,进行汇编之前停止编译

   .s          汇编语言源程序

3.Assembling (汇编)

   gcc -c hello.s hello.o

   选项-c     汇编阶段将汇编代码转为二进制目标代码

4.Linking(链接)

   gcc hello.o -o hello
   将程序中用到的库函数如printf的实现从默认的路径"/usr/lib/libc.so.6"链接过来

   现在即可运行可执行文件hello 

 

 

 

GCC警告提示:

 

1.Wall类警告提示

   占GCC警告选项90%以上,建议使用选项-Wall,即打开所有警告:

   gcc -Wall wrong.c -o wrong

2.非Wall类警告提示

   "-ansi"   强制GCC生成的标准语法所要求的告警信息,并不保证所有没有警告的程序都是符合ANSI C标准

   ”-pedantic“ 允许发出ANSI C标准所列的全部警告信息,保证所有没有警告的程序都是符合ANSI C标准

 

    gcc -pedantic wrong.c -o wrong

 

GCC使用库函数

Linux中有3种库函数形式:

1.静态 后缀为.a

   静态库的代码在编译时就已经连接到应用程序中   

 

2.共享 后缀为.so和版本号

   在程序开始运行时才载入

 

3.动态 后缀为.so和版本号

  在程序中的语句需要使用该函数时才调用,调用结束后释放动态库所占内存

 

  动态库和共享库只包含对库函数的引用,代码规模较小

  Linux系统所用的库都放在 /usr/lib 和 /lib 目录下

  库文件的路径通常不在系统默认路径下,则需要使用调用路径选项来指定相关库文件的位置

  1. ” -I dir “   在头文件的搜索路径列表中添加 dir 目录

      若"/root/workplace/gcc"下包括hello.h , hello.c:

      "# include <hello.h> ..."

      gcc hello.c -I /root/workplace/gcc -o hello

      <>表示在系统默认路径中搜索头文件,采用#include ”hello.h“则不用加 -I选项

  2. ”-L dir“ 与-I dir类似,区别在于”-L“指明库文件的路径

       dir中不能包括文件名,只是指定了路径 

  

  使用3种类型链接库

  用选项”-l“(小写的L)加库名称,如libm.a或libm.so 在调用时都写作”-lm“

  Linux系统默认采用动态链接的方式 ,若动态静态库重名,则需要显示包含后缀"-llibm.a"

  GCC代码优化: -On选项 n常取0~3 n越大优化工作越多  
  优化选项可以加速代码运行速度,但加大调试难度。一般在最终release的时候考虑优化

 

  以上为《嵌入式LinuxC编程入门(第二版)》ISBN 978-7-115-21281-8  学习整理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息