vs 2017 静态库 动态库 的初步使用

静态库的初步使用

  1. 新建 静态库 项目 Lib1
    会产生 sln文件与vcproj文件,vcproj是工程文件,sln是解决方案文件
    一个解决方案可以有多个工程
    在头文件(Lib1.h)写函数声明,在cpp文件定义函数实现
    这时候右键点击项目 ->生成, 会产生 Lib1.lib 的静态库文件
  2. 使用这个静态库文件
    新建一个控制台项目
    a)在主函数cpp文件里面 通过#include “相对路径\Lib1.h” 将函数声明引用过来
    b)引用第一步生成的静态库文件
    右键项目 -> 属性 ->配置属性 ->链接器->常规->附加库目录 将第一步生成的Lib1.lib文件所在的目录添加上(可以是相对路径)
    右键项目 -> 属性 ->配置属性 ->链接器-> 输入->附加依赖项 填写上静态库文件的名字 Lib1.lib(这一步也可以通过代码来完成
#pragma comment(lib, "Lib1.lib")

这个时候就可以正常使用这个静态库提供的函数了

动态库的初步使用

  1. 用vs新建一个动态库项目 fouroperations,
    会出现 dllmain.cpp这个文件内容如下:
// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"BOOL APIENTRY DllMain( HMODULE hModule,DWORD  ul_reason_for_call,LPVOID lpReserved)
{switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;
}

再创建要对外提供的 头文件 与 源文件
fouroperations.h

#pragma onceclass FourOperations {
public:__declspec(dllexport) FourOperations();__declspec(dllexport) ~FourOperations(); static __declspec(dllexport) double add(double a, double b);//加法static __declspec(dllexport) double sub(double a, double b);//减法static __declspec(dllexport) double mul(double a, double b);//乘法static __declspec(dllexport) double div(double a, double b);//除法__declspec(dllexport) void print();
};

fouroperations.cpp

// fouroperations.cpp : 定义 DLL 应用程序的导出函数。
//#include "stdafx.h"
#include "fouroperations.h"
#include "iostream"
using namespace std;FourOperations::FourOperations() {}FourOperations::~FourOperations() {}double FourOperations::add(double a, double b) {return a + b;
}
double FourOperations::sub(double a, double b) {return a - b;
}
double FourOperations::mul(double a, double b) {return a * b;
}
double FourOperations::div(double a, double b) {return a / b;
}
void FourOperations::print() {cout << "this is fouroperations.cpp" <<endl;
}

这时候右键项目,点击生成会生成dll文件,发布的话,就需要
头文件 fouroperations.h 与 fouroperations.lib 与 fouroperations.dll
在这里插入图片描述
2. 使用这个动态库文件
新建一个项目,右键项目属性->配置属性->c/c+±>常规->附加包含目录(把动态库文件的 fouroperations.h 添加进去 )
右键项目属性->配置属性->链接器->常规->附加库目录(填写fouroperations.lib 所在的路径)
右键项目属性->配置属性->链接器->输入->附加依赖项(填写fouroperations.lib )

这样就可以正常使用这个动态库文件了

另外关于 linux下,如果出现 静态库 使用了动态库, 而我们又要使用这个静态库的 情景:
参考https://www.cnblogs.com/fnlingnzb-learner/p/8119729.html
非常详细

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/382434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言贪吃蛇

扩展功能实现 加速减速计分链表实现彩色界面暂停 开源代码 贪吃蛇 动图展示&#xff0c;&#xff08;加载比较慢&#xff09;

知网毕业论文爬取

知网论文 查找文献的时候每次只显示10页二次检索功能又还没有&#xff08;不知道是不是我没找到&#xff09;。干脆用爬虫把所有和自己论文关键字相关的文献题目都爬取下来&#xff0c;然后自己做一个小的检索表。 开源项目 https://github.com/hodgekou/CNKICrawler.git 配…

git 初步使用01

git工作流程 git的安装 1&#xff09;安装git 2&#xff09;安装乌龟 3&#xff09;汉化乌龟创建本地仓库 在一个空目录&#xff0c;打开git bash here&#xff0c; 输入命令 git init 删除并保留本地副本 选中目标文件&#xff0c;右键乌龟&#xff0c;删除并保留本地副本 这…

Go语言爬虫项目将结果写入MySql数据库

来源于Google资深工程师深度讲解Go语言 package mainimport ("fmt""io/ioutil""net/http" )const url "http://www.zhenai.com/zhenghun"func main() {//发送get请求resp, err : http.Get(url)if err ! nil {panic(err)}//关闭通道d…

从《四驱兄弟》到“联想中国”

《四驱兄弟》 小学的时候看过一个日本的动画片叫四驱兄弟&#xff0c;里面就是一群小朋友代表国家各种比赛&#xff0c;其中让我象比较深刻的是他把美国队描述的非常邪恶&#xff0c;各种破坏别人的车子&#xff0c;通过卑鄙手段取得胜利。然后最后好像是正义战胜邪恶的剧情还…

位图原理、代码实现及应用实例

位图的原理&#xff1a; 在位图中采用比特位表示对应的元素存在或者不存在 0&#xff1a;不存在 1&#xff1a;存在例如一个int整数有32个比特位可以表示0-31个整数。 再举一个例子 存入的数字为8988 首先&#xff1a; 8988/32 280 其次&#xff1a; 8988%32 28 再来一个例…

布隆过滤器的原理、应用场景和源码分析实现

原理 布隆过滤器数据结构 布隆过滤器是一个 bit 向量或者说 bit 数组&#xff0c;长这样&#xff1a; 如果我们要映射一个值到布隆过滤器中&#xff0c;我们需要使用多个不同的哈希函数生成多个哈希值&#xff0c;并对每个生成的哈希值指向的 bit 位置 1。 例如针对值 “baid…

Redis运维和开发学习笔记(1) Redis简介

文章目录Redis的特性速度快持久化多种数据结构主从复制高可用和分布式典型的应用场景Redis启动和可执行文件Redis可执行文件说明启动方式验证redisredis常用配置redis数据结构和内部编码Redis是单线程&#xff0c;不会同时执行两条命令哈希慢查询pipelineRedis的特性 速度快 …

Redis运维和开发学习笔记(5) 主从复制和sentinel哨兵模式

Redis运维和开发学习笔记(5) 主从复制和sentinel哨兵模式 主从复制 将主节点的数据改变同步给从节点 作用 备份数据读写分离 存在的问题&#xff1a; 手动干预切主等操作主节点的写能力受到单机限制主节点的存储能力受到单机限制 主从模式的故障恢复 当主节点发生故障时&am…

Redis运维和开发学习笔记(7) 内存管理和过期策略

Redis运维和开发学习笔记(7) 内存管理和过期策略 文章目录Redis运维和开发学习笔记(7) 内存管理和过期策略内存回收策略惰性删除定时任务删除maxmemory过期策略allkeys-lru主从搭建测试搭建完毕主从测试结果volatile-lru测试结果volatile-ttl测试结果allkeys-lru内存回收策略 …

Effective C++学习第十二天

条款47&#xff1a;请使用traits classes表现类型信息STL有五类迭代器分类&#xff0c;input迭代器&#xff08;只读&#xff0c;一次&#xff0c;向前&#xff09;、output迭代器&#xff08;可写&#xff0c;一次&#xff0c;向前&#xff09;、forward迭代器&#xff08;读/…

Linux 学习

1.linux文本命令行语言环境设置命令 查看当前语言环境&#xff1a; echo &#xffe5;LANG 修改&#xff1a; LANG选择的语言环境’ 引申&#xff1a;https://blog.csdn.net/huoyunshen88/article/details/41113633 2.linux中的硬链接和软连接 linux中文件的储存方式&#xf…

redis源码剖析(四)跳表

文章目录整数集合跳跃表压缩列表总结整数集合 当一个集合只包含整数&#xff0c;且这个集合的元素不多的时候&#xff0c;Redis 就会使用整数集合 intset 。首先看 intset 的数据结构&#xff1a; typedef struct intset {// 编码方式uint32_t encoding;// 集合包含的元素数量…

在Redis客户端设置连接密码 并演示密码登录

我们先连接到Redis服务 然后 我们要输入 CONFIG SET requirepass “新密码” 例如 CONFIG SET requirepass "A15167"这样 密码就被设置成立 A15167 我们 输入 AUTH 密码 例如 AUTH A15167这里 返回OK说明成功了 然后 我们退出在登录就真的需要 redis-cli -h IP地…

redis源码剖析(五)—— 字符串,列表,哈希,集合,有序集合

文章目录对象REDIS_STRING &#xff08;字符串&#xff09;REDIS_LIST 列表REDIS_SET &#xff08;集合&#xff09;REDIS_ZSET &#xff08;有序集合&#xff09;REDIS_HASH (hash表)int refcount&#xff08;引用计数器&#xff09;unsigned lru:REDIS_LRU_BITS对象 对于 Re…

redis源码剖析(六)—— Redis 数据库、键过期的实现

文章目录数据库的实现数据库读写操作键的过期实现数据库的实现 我们先看代码 server.h/redisServer struct redisServer{...//保存 db 的数组redisDb *db;//db 的数量int dbnum;... }再看redisDb的代码&#xff1a; typedef struct redisDb {dict *dict; /*…

linux中错误总结归纳

1.使用gcc编译C文件&#xff0c;C文件在for循环语句中出现变量定义 编译器提示错误&#xff1a;“for”loop initial declarations are only allowed in C99 mode. note:use option -stdc99or-stdgnu99 to compile; 原因&#xff1a;gcc的标准是基于c89的&#xff0c;c89不能在…

makefile内容小结

makefile中每个功能主要分为三部分&#xff1a;目标&#xff0c;依赖条件和命令语句 1.支持对比更新的Makefile写法&#xff08;只会编译文件时.o文件和.c文件时间不一致的文件&#xff09; 2.使用makefile自动变量和自定义变量的makefile写法 其中&#xff1a;这三个符号为ma…

事务隔离级别动图演示

事务的基本要素&#xff08;ACID&#xff09; 原子性&#xff08;Atomicity&#xff09; 事务开始后所有操作&#xff0c;要么全部做完&#xff0c;要么全部不做&#xff0c;不可能停滞在中间环节。事务执行过程中出错&#xff0c;会回滚到事务开始前的状态&#xff0c;所有的…

linux中的man文档结构

使用命令 man chapter章节号查找的内容