介绍了GCC的基础概念、常用参数以及如何构建静态、动态链接库,并通过实例给出了静态和动态链接库之间的区别

     

GCC,全称GNU Compiler Collection,是一套由GNU开发的编程语言编译器。它支持多种编程语言,如C、C++、Objective-C、Fortran、Ada等,并能进行预处理、编译、汇编和链接等步骤来生成可执行文件。

在编译过程中,使用GCC命令行选项可以指定各种参数。其中,"-shared"选项可以让GCC生成动态连接库,而非可执行文件;"-fPIC"表示编译为位置独立的代码,使得动态载入时可以实现真正的代码段共享;"-L"用来指定编译时动态链接库的位置;"-ltest"则用于指定编译器查找的动态连接库名称。

除此之外,利用GCC还可以制作静态库和动态库。静态库在编译阶段会直接将库文件加入到可执行文件中,这样可执行文件会相对较大;而动态库在程序运行时才被加载,因此可以减小可执行文件的大小。制作静态库的步骤包括:编写源代码并编译成.o文件,然后通过ar命令将.o文件制作成静态库。制作动态库则需要在编译时加入-fPIC和-shared选项。

请阐述动态链接库和动态链接库之间的相同点和不同点

动态链接库和静态链接库都是共享代码的方式,但是两者存在一些显著的区别。首先,在编译阶段,静态链接库会将目标文件.o合并成一个.a库,没有发生真正的链接过程;而动态链接库在编译时会进行“有效”的链接,需要使用-fPIC和-shared选项。

其次,静态链接库在程序执行前就已经链接到可执行文件中,因此生成的可执行文件相对较大;相反,动态链接库在程序运行时才被加载,可以减小可执行文件的大小。

此外,当程序调用静态链接库中的函数时,连接器会将所需的函数拷贝到执行文件中;然而对于动态链接库,某个程序在运行中要调用某个动态链接库函数的时候,操作系统会先查看所有正在运行的程序,看是否已有此库函数的拷贝了。如果有,则让其共享那一个拷贝;只有没有才链接载入。

最后,静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值