ubuntu学习笔记(一)库的创建(持续完善)

什么是库

库的本质是一串二进制代码,有着实现特定效果的功能。库是有源码的,如果对一个库的构造感兴趣,可以下载源码看看。下载后编译生成库文件,也可以直接下载库文件,库一般在/lib目录下。Linux下主要分为静态库和共享库。

库的作用

使用库可以提高编程效率,需注意Windows和Linux的库文件是不兼容的,但是Linux和类Linux系统的库文件兼容,具体需要进一步尝试。

静态库

静态库在编译链接时,把调用到的那一部分代码包含到了可执行文件,运行的时候就不再需要静态库了,因此也有更快的运行速度。
但是由于静态库中的代码复制到了程序中,会占用更多的空间。而且静态库的优化升级,需要重新编译链接

// 
gcc -c file.c -Wall

通过上面的代码生成file.a文件

ar crs libfile.o file.a

上面的代码将生成的file.a文件生成静态库文件,
库文件名叫libfile
库名叫file这是两个概念,编译的时候指定库名而不是库文件名

gcc -o file file.c -L. -lfile

L指定库的路径,l指定库名

共享库

共享库编译链接时只记录了用到了哪个共享库的哪个符号,并不复制相关代码。
*使程序更加的轻量
*多个程序可以共享一个库
*程序运行时需要加载库
*升级方便无需重新编译

gcc -c -fPIC file.c file1.c file2.c -Wall

-fPIC意思是生成的.o文件可以在任意位置执行,编译的时候用到相对寻址,不是绝对寻址。通过上面的代码生成了相应的.o文件

gcc -shared -o libcommon.so.1 file1.o file2.o

共享库的命名规则
共享库文件名libcommon.so.1
so代表共享库文件,1代表库的版本,这样可以保留不同版本的共享库

ln -s libcommon.so.1 libcommon.so

上面代码是创建一个符号链接
最后编译链接共享库

gcc -o file file.c -L. -lcommon

用法和静态库一样,gcc默认优先链接动态库,没有动态库就去找对应的静态库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值