嵌入式系统笔记Gcc编译器

工具: 1.编译器:Gcc 2.调试器:Gdb 3.工程管理器:Make 4.脚本:Shell
在这里插入图片描述

一、编译器Gcc
1.Gcc可编译C、C++、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言,也是一个交叉平台编译器,能够在当前CPU平台上为不同体系结构的硬件平台开发软件。
在这里插入图片描述
在这里插入图片描述
Gcc的基本用法:
gcc [option] [filenames]
option 是编译器所需的编译选项
filenames 是编译的文件名
gcc中-c和-o是编译时可选的参数

加-c, (compile)只编译生成中间同名目标文件,不链接
加-o,(output)指定输出文件名,该文件为可执行文件,不加-o会默认生成a.out
加-g可执行程序包含调试信息
加-g为了调试用的
加-g 是为了gdb 用,不然gdb用不到
加-I (注意是大写的i) 给gcc添加自定义的头文件的路径
加-L 给gcc添加额外的搜索库的路径
加-l(小写的L) 给gcc 指定具体的库
加-O是对程序进行优化编译,链接,采用这个选项会使整个源代码会在编 译,链接的过程中进行优化处理但编译和链接的速度相对地会慢一些,-O2比-O更好优化,连接,但整个编译和连接过程更慢。
加-Wall是生成任何警告信息
加-w是不生成任何警告信息
加-DMACRO是定义MACRO宏,相当于在程序中使用#define MACRO

.o 就是object, 也就相当于windows下编译的obj文件, 俗称目标文件.
.a 就是archive, 也就相当于windows的VC下编译的lib文件, 俗称静态库文件。
.so 就是在执行程序启动时加载到执行代码中的称为动态库文件。
.s 操作 :汇编
.S 操作 : cpp + 汇编

静态库和动态库:
静态库命名:
lib + 库的名字 + .a
例:libMyTest.a (MyTest为静态库的名字)
动态库命名:
lib + 库的名字 + .so
例:libMyTest.so (MyTest为动态库的名字)

静态库作用
在项目开发过程中,经常出现优秀代码重用现象,又或者提供给第三方功能模块却又不想让其看到源代码,这些时候,通常的做法是将代码封装成库或者框架,生成的静态库要和头文件同时发布。

优点:
寻址方便,速度快
库在链接时被打包到可执行文件中,直接发布可执行程序即可以使用
缺点:
静态库的代码被加载到可执行程序中,因此体积过大
如果静态库的函数发生改变,必须重新编译可执行程序

动态库作用
可以被多个程序使用因此叫共享库,共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。

优点:
节省内存
易于更新,不用重新编译可执行程序,运行时自动加载

缺点:
延时绑定,速度略慢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值