VS下生成与配置静态库与动态库(一)
此处仅以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”的添加要求
- 选择编译为静态库:
在“属性”->“配置属性"->”常规“->”配置类型“下选择”静态库(.lib)“(默认是"应用程序(.exe)"),在此界面上可以更改输出文件(.lib)所在的目录,
以及lib文件的名称(默认是工程的名称):
4.选择生成解决方案,这时在你刚刚选择的输出文件夹下(这里是lib文件夹),已经生成了静态库文件,add.lib
使用:
使用很简单:
1.属性-》配置属性-》C/C++->常规-》附加包含目录,填写”add.h“所在目录;
2.属性-》配置属性-》链接器-》附加依赖项,填写”add.lib“;
3.属性-》配置属性-》链接器-》附件依赖目录,填写”add.lib“所在目录;
4.在用到CAdd这个类的地方添加头文件包含#include
5.具体调用CAdd类的函数
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Spring Boot 2 快速教程:WebFlux Restful CRUD 实践(三)
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第102篇原创 03:WebFlux Web CRUD 实践 文章工程: JDK 1.8 Maven 3.5.2 Spring Boot 2.1.3.RELEASE 工程名:springboot-webflux-2-restful 工程地址:见文末 一、前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里我们不对数据库储存进行访问,因为后续会讲到,而且这里主要是讲一个完整的 WebFlux CRUD。 二、结构 这个工程会对城市(City)进行管理实现 CRUD 操作。该工程创建编写后,得到下面的结构,其目录结构如下: ├── pom.xml ├── src │ └── main │ ├── java │ │ └── org │ │ └── spring │ │ └── springboot │ │...
- 下一篇
Java8的stream API与 C#的 LINQ 拓展方法对比
为方便初学 Java8/C# 集合操作的人,特意写下这篇文章. 前期准备 C#版 java版 单集合 分类筛选 计数(Count) Date time1 = convertLocalDateToTimeZone(LocalDate.of(1990, 1, 1)); //0 Long count1 = list1.stream().filter(o -> o.getBirthday().equals(time1)).count(); int count1 = list1.Where(o => o.Birthday.Equals(new DateTime(1990, 1, 1)) && o.Sex == Sex.Male).Count(); long count2 = list1.Where(o => o.Birthday.Equals(new DateTime(1990, 1, 1)) && o.Sex == Sex.Male).LongCount(); /* 0 0 */ 分组(GroupBy) Map<Sex, List<...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8编译安装MySQL8.0.19