动态链接库和静态链接库

转自https://blog.csdn.net/freestyle4568world/article/details/49817799

库文件分为静态链接库和动态链接库。
1.静态链接库
在链接阶段,将目标文件和库文件合并,生成可执行文件。因此可执行文件会比较大。
举例:
头文件add.h:
#ifndef _ADD_H
#define _ADD_Hg++ -o test test.cpp -L./addlib -lad
#include <iostream>
int add(int a, int b);
#endif
对应的源文件add.cpp:
#include "add.h"
#include <iostream>

int add(int a, int b){
return a+b;
}
生成静态库:
g++ -c add.cpp生成.o文件
ar -crv libadd.a add.o生成libadd.a库文件
调用该库的主函数:
#include "./addlib/add.h"
using namespace std;
int main(){
cout<<add(3,4)<<endl;
}
编译一下:
g++ -o test test.cpp -L./addlib -ladd
-L为库文件目录,-l为libadd.a库文件掐头去尾
2.动态链接库
静态库在链接时将库文件合成到可执行文件中,因此可执行文件会很大,优点是可以移植性强。动态库在链接时不会将库文件合成到可执行文件中,而是在执行时动态调用库文件,所以生成的可执行文件很小,但是可移植性差。所以动态链接更常见。不过两者应该合理选择。
生成动态库:
g++ -fPIC -shared -o libadd.so add.cpp
编译:
g++ -o test test.cpp -L./addlib -ladd
执行:
./test
发现找不到libadd.so,因为linux默认在/etc/ld.so.conf文件中设置了动态链接库寻找路径。在里面加上一行libadd.so的绝对地址即可。再执行ldconfig,然后运行./test,成功。

综上所述,动态和静态链接库的选择要视情况而定,一般推荐动态链接库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值