首页 > 系统相关 >Windows Visual Studio中静态库与动态库加载

Windows Visual Studio中静态库与动态库加载

时间:2023-01-10 13:55:13浏览次数:40  
标签:文件 包含 lib Windows 附加 Visual Studio 目录 加载

VS项目中的包含目录库目录附加包含目录附加库目录附加依赖项在项目->属性->配置属性下进行配置,具体说明如下:

1 静态库加载

1.1 VC++目录

包含目录:即语句#include<xxxx.h>中的头文件xxxx.h的搜索目录
库目录:即.lib文件的搜索目录

1.2 C/C++:

常规->附加包含目录:即语句#include<xxxx.h>中的头文件xxxx.h的搜索目录(多项之间用分号;分割)

1.3 链接器:

常规->附加库目录:寻找.lib文件的搜索目录
输入->附加依赖项lib库文件名(Tips: C++的库一般会把函数、类等声明放在*.h头文件中,具体函数、类等实现放在*.cpp或*.cc中。编译之后,.cpp,.cc,*.c会被打包成一个.lib文件,这样可以保护源代码)

 

1.4 配置区别

  1. 包含目录vs附加包含目录库目录vs附加库目录的区别
    包含目录:修改了系统的include宏的值,是全局的;
    附加包含目录:用于当前项目,对其他项目没有影响。
    注意:库目录附加库目录的区别同上;

  2. 包含目录vs附加包含目录库目录vs附加库目录的区别主要在于全局还是仅针对当前工程;若仅需要对某工程进行配置,则在附加包含目录附加库目录中添加即可。
    注意:要使用一个库,除了要include其头文件以外(附加包含目录),还要在链接过程中把lib加进去,即需要配置附加库目录附加依赖项(库文件名)。

1.5 某工程具体配置方法

为了提高程序的可移植性,通常会将第三库放在解决方案(.sln)或者工程(.vcxproj)文件所在的文件夹下;添加目录的时候添加相对目录,这样在其他电脑上运行时就不会出现配置的问题了。

注意:相对路径是针对工程文件(*.vcxproj)而言的。

  1. 附加包含目录—添加工程的头文件目录:
    项目->属性->配置属性->C/C++ ->常规->附加包含目录:加上头文件的存放目录;
  2. 附加库目录—添加文件引用的lib静态库路径:
    项目->属性->配置属性->链接器->常规->附加库目录:加上lib文件的存放目录;
  3. 附加依赖项—添加工程引用的lib文件名:
    项目->属性->配置属性->链接器->输入->附加依赖项:加上lib文件名。

附加依赖项也可直接给带有路径(相对路径 或 绝对路径)的lib文件,此时无需配置附加库目录

 

 

2 动态库加载

与静态库不同,动态库的加载有2种方式,分为隐式加载显示加载

2.1 隐式加载

所需文件:接口.h头文件dll文件lib文件
.h文件.lib文件的加载方式与静态库加载完全一致。但.dll文件必须放在环境变量指定的目录下,通常是与目标.exe文件放在同一目录下。

2.2 显示加载

所需文件:.h文件dll文件。理论上不需要.h头文件,但是前提是明确知道函数接口。
利用LoadLibrary()函数进行加载、利用FreeLibrary()函数进行卸载。如图2 动态库显式加载与卸载范例

 

 

2.3 两种加载方式区别

  1. 显示加载使用灵活,需要时加载,用完卸载;
  2. 隐式加载伴随着整个程序的生命周期。

总结

库分为静态库动态库

  1. 静态库可执行文件.exe打包,动态库可执行文件.exe独立。
  2. 静态库加载需要:.lib文件.h文件;
  3. 动态库隐式加载需要.dll文件.h文件.lib文件;
  4. 动态库显示加载只需要.dll文件

标签:文件,包含,lib,Windows,附加,Visual,Studio,目录,加载
From: https://www.cnblogs.com/lishanyang/p/17040100.html

相关文章

  • cdc-file-transfer 谷歌开源的windows 到linux 同步工具
    cdc-file-transfer是基于contentdefinedchunking以及fastcdc技术,cdc-file-transfer目前提供了两种工具cdc_rsync类似rsync的同步能力,进行文件拷贝,但是性能相比rsyn......
  • android 原生打包到混合开发框架uniapp 和cordova (1) ----Android Studio中的Gradle面
    AndroidStudio中的Gradle面板没有Task任务列表 Tasklistnotbuiltduring sync 找不到gradle命令解决:1.找到gradle工具栏2.点击图中扳手->选中gradlesettin......
  • windows无法连接VMware虚拟机的linux
    遇到的问题:今天使用xshell连接虚拟机,无法连接。解决过程:1.测试ping,linux虚拟机能ping通windows主机,可是windows主机ping不通linux虚拟机。2.查看vm虚拟机的子网地址,如图,点......
  • Windows文件通过实时告警更改审核
    使用DataSecurityPlus保护您组织的机密数据免遭不当访问,未经授权的更改或潜在的盗窃。此文件更改审核和告警工具提供持续的更改跟踪,深入审核,合规性报表和实时告警,以及早发......
  • windows系统下的mysql 8.0 修改密码、创建用户
    https://blog.csdn.net/qq_40015409/article/details/1115832351.以管理员权限运行cmd2.停止服务netstopmysql//不需要关闭服务3.cdmysql安装目录4.mysqld--cons......
  • VS2022 Visual Assist 小番茄 设置强调色透明度
    这个估计你们找不到位置小番茄的RGBA其实是RGB~A也就是不透明度所以正常要设定为FFRRGGBB即可字体透明但是正常不可设置懒得逆向VAX代码...建议everything直接搜A......
  • win32 EnumWindows in dart
    使用和C里面完全一样latefinalint_workerWHexHandle;int_enumWindowsProc(inthWnd,intlParam){///print(hWnd.toRadixString(16));intpHWnd=FindWindo......
  • windows 11安装oracle 19c客户端
    文档课题:windows11安装oracle19c客户端.软件包:WINDOWS.X64_193000_client.zip--以管理员身份双击setup.exe参考网址:https://cdn.modb.pro/db/580252......
  • Windows权限维持
    隐藏用户原理在创建用户时,在用户名后添加一个$并修改注册表即可把该用户隐藏,只有在注册表中才能看到用户信息复现过程使用netuserwhoami$Aa123456/add添加一个用......
  • Windows提权
    下边内容都是一些提权思路的整理,对于很多知识点并没有细化和深入,仅供个人参考,日后在实战中碰到了会深入学习并记录在新的文章中。基础知识权限组划分:Administrators:管......