在Visual Studio中使用.lib和.dll的环境搭建
1 静态库和动态链接库的区别
动态链接库是在运行的时候被调用的,静态库在链接的时候被链接到最终生成的应用程序(.exe)中
静态库需要用到的文件 (.lib .h)
头文件(.h)提供接口,库文件(.lib)提供实现
动态链接库需要用到的文件 (.dll .lib .h)
头文件(.h)提供接口,库文件(.lib)仅提供索引,动态链接库文件(.dll)提供实现
2 尖括号<>和双引号""引用.h文件的区别
尖括号<>会从VC++包含目录中寻找.h文件,一般是用于调用第三方库
双引号""会从项目配置属性中c/c++的附加包含目录寻找.h文件,一般是用于寻找工程内的.h文件
目录
Visual Studio项目环境配置
一. 静态库环境配置
1.1 添加静态库对应的头文件所在目录
1.1.1 使用尖括号<>引用头文件的配置
右键项目->属性->配置属性->VC++目录

点击包含目录,点击右边的下拉箭头,点击编辑,添加新的项,手动输入附加库头文件的路径



点击确定保存,这样就能保证我们能用<>引用我们想要使用的库的头文件了
1.1.2 使用双引号引用头文件的配置
要使用双引号""引用项目中的头文件的话,在配置属性->c/c++->附加包含目录中添加头文件所在路径即可


确定,完成配置
1.2 添加静态库所在目录
和添加包含目录同理,点击库目录,点击右边的下拉箭头,编辑,添加静态库所在目录


也可以在配置属性->链接器->常规->附加库目录中添加库所在路径

1.3 添加附加依赖项
右键项目->属性->配置属性->链接器->附加依赖项->编辑
添加依赖的lib文件名


到此位置lib的配置就结束了
1.4 测试以及常见错误
- 试着引用一下glfw库,没有出现红线说明我们的头文件包含目录没问题了

- 跑一下程序,如果出现LNK1104,说明库目录出了问题

- 出现LNK2019 无法解析的外部符号XXXXX,该符号在函数XXX被引用

这种情况就是没有添加附加依赖项导致的
总结一下配置静态库可能会出现的问题
预处理错误,未找到头文件
解决方式:在VC++目录或者c/c++的附加目录中添加头文件所在目录链接错误,LNK1104,无法找到库文件
解决方式:在VC++目录或者链接器的附加库目录添加库所在的目录链接错误,LNK1120,LNK2019, 无法解析的外部符号
解决方式:在链接器中添加附加依赖项
二. 动态链接库环境配置
动态链接库可以在运行时被使用,调用动态库需要用到 .dll .lib .h三个文件,**其中.lib和.h文件的配置方式和静态库一样**,就不重新说一次了
2.1 设置.dll的环境
关键的一步是在项目的调试环境中添加.dll文件所在路径
右键项目->配置属性->调试->环境->编辑

输入PATH=附加库的路径1;附加库的路径2;附加库的路径3;…
每个路径用分号隔开

点击确定,保存
梳理一下动态链接库环境配置的流程
- 添加头文件(.h)所在路径到VC++的包含目录或者项目配置属性c/c++的附加包含目录中
- 添加静态库(.lib)所在路径到VC++库目录或者链接器的附加库目录中
- 添加附加依赖项到链接器的附加依赖项中
- 添加动态链接库(.dll)所在路径到项目调试环境中
在Visual Studio中使用.lib和.dll的环境搭建的更多相关文章
- Visual Studio中的lib的链接顺序
描述:如果有一个exe工程,它依赖于A.lib,B.lib,A.lib和B.DLL我同样有他们的源码工程.依赖顺序是这样的exe->A.lib->B.DLL.那么如果我改动了B的源码,编译 ...
- Visual Studio Code安装以及C/C++运行环境搭建
众所周知VSCode是全宇宙最好用的编辑器 (雾 配置了很久,今日终于配置完成了,还是有点麻烦的,本文是为了方便一些不懂怎么配置的小白,以及还有一些美化教程. 一.安装 Visual Studio C ...
- visual studio中新建和使用dll
本文的目的是 创建一个最小化的dll并使用它 环境:win7 + vs2012 一个VS的解决方案(sln)下面可以有多个项目(project),所以这里新建一个解决方案,然后下面创建两个项目. 新建 ...
- Visual Studio问题集锦:coloader80.dll未正确安装
问题 今天在修改之前的一个项目的时候报了一个错,大概内容如下: 有一个 Visual Studio 的 DLL 文件(coloader80.dll)未正确安装.请通过"控制面板"中 ...
- Visual Studio 中 Build 和 Rebuild 的区别
因为之前写的程序比较小,编译起来比较快,所以一直都没有太在意 Build 和 Rebuild 之间的区别,后来发现两个还是有很大不同. Build 只针对在上次编译之后更改过的文件进行编译,在项目比较 ...
- Visual Studio中开发
如何在Visual Studio中开发自己的代码生成器插件 Visual Studio是美国微软公司开发的一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具.代 ...
- 在Visual Studio 中开发Office Add-in
作者:陈希章 发表于2017年7月13日 "Talk is cheap, show me the code",我们就用代码来说话吧.这一篇将给大家介绍如何开始Office Add- ...
- Visual Studio中的/MD, /MT, /MDd, /MTd 选项
Visual Studio中/MD, /MT, /MDd, /MTd表示多线程模块是否为dll.对于这几个选项我的理解如下: /MD: 定义了_MT和_DLL,让程序用多线程和dll版本的运行库. / ...
- 在Visual studio 中解除 TFS 的账号绑定
在Visual Studio中, 只要使用了TFS, 就会要求输入用户名密码验证 . 但是一旦点击验证对话框下部的:记住用户名密码 以后都不能再修改用户名了. 而且重装Visual Studio 听说 ...
随机推荐
- Redis info参数总结
可以看到,info的输出结果是分几块的,有Servers.Clients.Memory等等,通过info后面接这些参数,可以指定输出某一块数据. 下面是针对info的输出在旁边注释了,因为对Redis ...
- 【笔记】关于TCP三次握手和四次挥手的理解
1. 三次握手: 服务器一定处于Listen状态,否则客户端发过来的连接会被拒绝.注:服务器和客户端的角色是相对的. 客户端发送第一次握手(客户端发送连接请求(SYNC包)到服务器)之后由Closed ...
- Linux配置CentOs7.4(网络连接处理)
说明:CentOS 7.0默认安装好之后是没有自动开启网络连接的! 进入登录界面 账号输入root 回车 再输入上面设置的root密码回车 系统登录成功 设置IP地址.网关DNS cd /etc/s ...
- javascript花式理解闭包
一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...
- 7、Android---网络技术
玩手机不能上网是单机的时代 而且现在的流量也出了无限使用 几乎网络离不开人们的日常生活 7.1.WebView的用法 遇到一些特殊的请求 在程序中展示一些网页 加载和显示网页都是浏览器的任务 在不打开 ...
- Oracle(一)执行计划
目录 一.什么是执行计划 二.如何查看执行计划 三.如何读懂执行计划 1. 执行顺序的原则 2. 执行计划中字段解释 3. 谓词说明 4. JOIN方式 4.1 HASH JOIN(散列连接) 4.2 ...
- 404 Note Found 队-Beta6
目录 组员情况 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示组内最新成果 团队签入记 ...
- Lambda 表达式语法
本主题介绍 lambda 表达式的语法. 它演示提供 lambda 表达式的结构元素的示例,这些元素与示例. Lambda 表达式语法 下面用于定义显示语法,ISO C++11 从标准,lambda ...
- 实现Redis Cluster并实现Python链接集群
目录 一.Redis Cluster简单介绍 二.背景 三.环境准备 3.1 主机环境 3.2 主机规划 四.部署Redis 4.1 安装Redis软件 4.2 编辑Redis配置文件 4.3 启动R ...
- windows下搭建permeate漏洞测试系统实战
最近一直在搭建漏洞测试环境练习. 在此期间遇到很多问题,但是通过学习都一一解决.通过写此文来记录遇到的问题和解决方法. 首先,在github上看到了一个不错的permeate渗透测试系统.于是想搭建拿 ...