gcc的使用及库的应用

一、使用gcc编译 输出可执行文件

1)在ubuntu上执行gcc main.c -o main,得到可执行程序main

2)执行程序 ./main 111 222 333 44 555 66,可得到以下输出

3)一个程序的生成可执行文件的过程如下:

二、库的应用

1)库的概念

库文件:是一个二进制可执行文件,将多个目标文件统一整理合成为一个文件便于使用和管理。

2)库的分类

1.静态库:通过静态库封装的功能函数,在程序编译到链接库步骤的时候,会将函数继承到可执行程序中,即编译程序时,静态库中的函数被拷贝到当前的程序中。

<1>命名:以lib开头,以.a结尾,如libxxx.a,xxx为库名称。

<2>制作指令:

编译:使用gcc 将plus.c 编译输出plus.o:gcc -c plus.c -o plus.o

打包:使用ar命令将plus.o打包为静态库:ar crs libplus.a plus.o

链接:在main.c plus.h libplus.a同一个目录的情况下,编译并链接库:gcc main.c -o main -L. -l plus

其中,-L 和 -l 用于指定库文件的路径和库文件名。 此命令中-L.指在当前目录路径中查找库文件,-l plus为指定查找库文件名为 libplus.a进行链接

<3>ar指令:

ar

创建、修改和提取静态库.a文件

c创建一个库
r在库中插入模块(替换),已存在则更新
s添加或更新目标文件索引,区分大小写,区别是否生成符号表
d从静态库中删除文件objfile
x

从静态库文件中抽取文件objfile

 2.动态库:用动态库封装的功能函数,把库函数的链接推迟到程序运行的时候,当程序执行到库函数的时候,会到内存中找动态库函数。

<1>命名:以 lib 开头,以.so 结尾,如libxxx.so,xxx为库名称。

<2>制作指令:

编译:使用gcc 将plus.c 编译输出plus.o:gcc -c -fpic plus.c -o plus.o

打包:使用-shared命令将plus.o打包为动态库:gcc -shared -o libmylib.so plus.o

链接gcc main.c libmylib.so main -L. -l plus

其中,PIC(Position Independent Code,位置无关代码),调用代码通过相对地址标识调用代码的位置,模块中的指令与该模块被加载到内存中的位置无关。

3)两种库的区别

优点

缺点

动态库

动态库的改变并不影响程序,所以动态函数库升级比较方便

在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小

因为函数库并没有整合进程序,所以程序的运行环境必须提供相应的库

静态库

在编译后的执行程序不再需要外部的函数库支持,运行速度相对快些,运行效率高

如果所使用的静态库发生更新改变,程序必须重新编译

在编译过程中已经被载入可执行程序,因此体积较大

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值