gcc和g++的使用

一、gcc和g++的区别?

通常情况下: gcc 是C语言的编译器; g++是C++的编译器。

对于后缀为.c的文件,gcc会单作其为C程序,g++会当做为C++程序。

对于后缀为.cpp的文件,gcc和g++都会将其当做为C++程序。

编译阶段,g++会调用gcc,但是gcc不会自动调用g++。

C++代码中,如果想让某些函数用C编译,可以使用external“C”{函数},使用g++编译。

综上,很多人全部都用g++来编译。

二、文件是如何编译的?

从一个.cpp文件到可执行文件.exe,g++编译器中的实现大致也分为四个步骤:

1.、预处理(Preprocessing)

g++ -E main.cpp > main.i

这一步主要进行宏(#define)的替换,删除注释,插入#include的头文件等操作,生成的文件后缀名.i

2、编译(Compilation)

g++ -S mian.i

预处理之后变得简洁得代码文件,翻译成汇编语言,文件后缀为.s

3、汇编(Assembly)

g++ -c main.s

将汇编语言文件翻译成机器代码的二进制文件,文件后缀名为.o

4、链接(linking)

g++ main.o -o main

引入代码中使用到的库文件,生成可执行文件。

这里的-o 命令是指定可执行文件名。

到这里所有的编译已经结束。

三、编译动态库和静态库

大型项目中不可能使用一个单独的可执行程序提供服务,必须将程序的某些模块编译成动态或者静态库。

(1)静态编译

链接阶段,会将编译生成的目标文件.o与引用的库一起链接打包到可执行文件中。

优点

程序运行速度较快

不依赖其他库执行,移植较为方便

缺点

编译库与主程序,一起打包至程序中,会导致可执行程序体积较大。

更新不方便,需要重新编译

如果库被多个应用程序使用,多次装载会浪费内存。

(2)动态编译

程序运行时才被载入,解决了静态库对程序的更新、部署和发布带来的麻烦。用户只需要更新动态库即可。

优点

多个应用程序可以使用同一个动态库。

缺点

运行时加载,影响运行性能。

动态库缺失会导致文件无法运行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值