静态库与动态库

31 篇文章 3 订阅
14 篇文章 1 订阅

参考C++静态库与动态库


库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种,分别是静态库和动态库。它们的区别是在编译程序的链接阶段。

静态库

后缀为.a.lib,它与汇编生成的目标文件一起链接为可执行文件。一个静态库可以看做一组目标文件(.o,.obj)的集合。特点如下:

  • 对函数库的链接放在编译时期完成。
  • 程序运行时与函数库无关,移植方便。
  • 占用较大的空间和资源。

实例(linux下)

xhhmath.h(头文件)

#pragma once
class xhhmath
{
public:
   xhhmath(void);
   ~xhhmath(void);
   static double add(double a, double b);
   void print();
};

xhhmath.cpp(源文件,库)

#include"xhhmath.h"
#include<iostream>
double xhhmath::add(double a, double b) { return a + b; }
void xhhmath::print() { std::cout << "ok!" << std::endl; }
xhhmath::~xhhmath(void) {}
xhhmath::xhhmath(void) {}

bash下创建静态库,命名为:lib+name+.a

icc -c xhhmath.cpp 
ar -crv libxhhmath.a xhhmath.o

测试文件为test.cpp

#include<iostream>
#include"../xhhmath.h"

int main(){
	xhhmath t1;
	t1.print();
	std::cout<<"ss"<<std::endl;
	std::cin.get();
	return 0;
}

编译命令为

icc test.cpp -L../ -lxhhmath -o test

-L后接静态库所在路径,-l接静态库的主名(按命名规则去头去尾)。

动态库

由于静态库存在的问题:空间占用较大,静态库的更新不便于部署和发布。动态库就能很好地解决这些问题。动态库的后缀为.sodll,它不会被连接到目标代码中,而是在程序运行时才被载入。
特点如下:

  • 把一些库函数的链接推迟到程序运行时期。
  • 可以实现程序之间的资源共享。
  • 一些程序的更新变得简单。
  • 可以做到链接载入完全由程序员在代码中控制。
    bash下创建静态库的命令为
icc -fPIC -shared -o libxhhmath.so  xhhmath.cpp 

然后需要把动态库复制到/usr/lib目录下

cp libxhhmath.so /usr/lib/

编译命令和静态库一样

icc test.cpp -L../ -lxhhmath -o test
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值