VS下生成与配置静态库与动态库(一)

简介: 此处仅以VS2010为例,详细说明一下如何在VS环境下生成和使用C++的静态库与动态库。Qt下生成和使用静态和动态库后续再讲。       首先简单地理解一下静态库与动态库,以及两者的区别。静态库(.lib): 将.cpp文件中的函数的地址和定义,以及函数之间的链接关系通通打包,生成的一个二进制文件;动态库(.lib+.dll): 动态库的.lib文件,打包的只是.cpp文件中函数的地址和链接,函数的具体定义打包在*.dll文件中。

此处仅以VS2010为例,详细说明一下如何在VS环境下生成和使用C++的静态库与动态库。Qt下生成和使用静态和动态库后续再讲。

       首先简单地理解一下静态库与动态库,以及两者的区别。

静态库(.lib): 将.cpp文件中的函数的地址和定义,以及函数之间的链接关系通通打包,生成的一个二进制文件;

动态库(.lib+.dll): 动态库的.lib文件,打包的只是.cpp文件中函数的地址和链接,函数的具体定义打包在*.dll文件中。

联系:

1.二者都不包含函数的声明部分,因此调用这两种库的时候,都需要包含相应的头文件(*.h);

2.静态库和动态库的.lib文件,在生成可执行文件(.exe)的时候,都将被打包进*.exe文件中;

区别:

1.静态库的.lib文件远大于动态库的.lib文件;

2.动态库的.dll文件作为可执行文件.exe的附加文件加入到程序中,一般放在*.exe的同级目录下。

简单地介绍完这两种库,下面来看看在VS下是怎么生成和使用的。

       

静态库:

生成:

1.新建一个空的Visual Studio 2010 ,Visual C++, Win32 控制台工程,取名为“testlib”;

(你可以在向导中选择静态库选项,也可以在后续的设置中设置生成静态库,这里我们在后面进行设置);

2.构造一个类用于测试,这里叫做“CAdd”类,进行的是整数的加法运算,声明和实现分别保存在文件“add.h”和

“add.cpp”中:

“add.h”:

#ifndef ADD_H
#define ADD_H
 
class CAdd
{
public:
    CAdd();
    ~CAdd();
    int add(int a, int b);
};
 
#endif

"add.cpp":
#include "add.h"
CAdd::CAdd()
{
 
}
 
CAdd::~CAdd()
{
 
}
 
int CAdd::add(int a, int b)
{
    return a+b;
}

可以在“属性”->"C++"->"预编译头"下选择“不使用预编译头”去掉cpp文件的“stdafix.h”的添加要求

  1. 选择编译为静态库:

在“属性”->“配置属性"->”常规“->”配置类型“下选择”静态库(.lib)“(默认是"应用程序(.exe)"),在此界面上可以更改输出文件(.lib)所在的目录,

以及lib文件的名称(默认是工程的名称):

image

4.选择生成解决方案,这时在你刚刚选择的输出文件夹下(这里是lib文件夹),已经生成了静态库文件,add.lib

image

使用:

       使用很简单:

1.属性-》配置属性-》C/C++->常规-》附加包含目录,填写”add.h“所在目录;

  2.属性-》配置属性-》链接器-》附加依赖项,填写”add.lib“;

3.属性-》配置属性-》链接器-》附件依赖目录,填写”add.lib“所在目录;

4.在用到CAdd这个类的地方添加头文件包含#include

5.具体调用CAdd类的函数

目录
相关文章
QString格式化的几种用法:补零/进制转换/保留小数位等
QString格式化的几种用法:补零/进制转换/保留小数位等
3103 0
|
NoSQL Ubuntu 测试技术
GRPC C++开发环境搭建
GRPC C++开发环境搭建
851 1
|
Windows 计算机视觉 安全
流媒体技术学习笔记之(十三)Windows安装FFmpeg
一、下载地址: 网址:https://ffmpeg.org/ 选择Windows版本:https://ffmpeg.org/download.html#build-windows 二、解压安装: 下载并解压FFmpeg文件夹,它会生成一个类似名为“ffmpeg-20150504-git-eb9fb50-win32-static”的新文件夹:   打开你想安装的任意磁盘,例如:d盘。
3983 0
|
算法 数据安全/隐私保护
一文详解 RSA 非对称加密算法
非对称加密算法指的是 加、解密使用不同的密钥,一把为公开的公钥,另一把为私钥。 公钥加密的内容只能由私钥进行解密,反之由私钥加密的内容只能由公钥进行解密。也就是说,这一对公钥、私钥都可以用来加密和解密,并且一方加密的内容只能由对方进行解密。
9805 1
《QT从基础到进阶·十》QTableView,QTableWidget,QLineEdit设置只读和输入限制
《QT从基础到进阶·十》QTableView,QTableWidget,QLineEdit设置只读和输入限制
652 0
|
开发者 Python
【Python】已解决:ERROR: Could not find a version that satisfies the requirement easyocr (from versions: n
【Python】已解决:ERROR: Could not find a version that satisfies the requirement easyocr (from versions: n
621 0
|
算法 网络协议 安全
一个关于proto 文件的经验分享 :gRPC 跨语言双端通信显示错误码:12 UNIMPLEMENTED (附赠gRPC错误码表)
一个关于proto 文件的经验分享 :gRPC 跨语言双端通信显示错误码:12 UNIMPLEMENTED (附赠gRPC错误码表)
430 0
|
Linux 网络安全 开发工具
Centos7 sendmail服务安装与配置
该文本描述了在Linux系统中设置邮件服务的步骤。首先,启用httpd的邮件发送功能,然后安装sendmail、sendmail-cf和dovecot。接着配置/sendmail.mc,设定IP和邮件域名。在dovecot配置文件中启用imap、pop3和lmtp协议,取消明文认证限制,设定mail_location,并开启SSL。创建用户mail3和mail4,给予相应权限。停止postfix服务,编辑访问控制、提交配置、本地主机名等文件。最后,重置sendmail、dovecot和saslauthd服务。
624 0
|
存储 数据库 数据安全/隐私保护
如何使用AnyTXT Searcher实现远程办公速查异地电脑文件提升工作效率
如何使用AnyTXT Searcher实现远程办公速查异地电脑文件提升工作效率
327 0
mpeg-ps GB28181 ps封装
mpeg-ps GB28181 ps封装
308 0