当前位置: 首页 > article >正文

Visual Studio 引入外部静态库与动态库

Windows Visual Studio 引入外部静态库与动态库

1.前言

在C++开发中不可避免地要在自己的项目中引入外部库(OpenGL、OpenCV、OCC等),使用这些库都需要在项目中配置相应的属性才能正常开发编译。

2.引入

引入外部库主要引入三种文件:.h/.hxx(头文件)、.lib(静态库文件)、.dll(动态库文件)。这三种文件分别在编写代码、编译代码、运行代码时起作用,配置错误会在相应的阶段报错。

2-1 .h/.hxx

引入头文件是为了引入外部库的函数/类声明,告诉编译器存在这个函数以及函数的参数是什么,配置错误会在include头文件和函数使用的时候出现下滑波浪线报错:
在这里插入图片描述在这里插入图片描述
配置方法是右键项目打开项目属性,在VC++ Directories->Include Directories写入外部库的头文件地址:
在这里插入图片描述
外部库的头文件一般为inc或include文件夹。配置成功后,报错就会消失。

2-2 .lib

.lib存放的是函数的定义(对应平时开发的.cpp文件),配置错误在编译代码时会出现unresolved external symbol错误:
在这里插入图片描述
配置流程分为两步,第一步告诉.lib文件存放的路径,在VC++ Directories->Libraries Directories中写入。
在这里插入图片描述
外部库的.lib文件一般放于bin、lib这类似的文件夹中,如果lib文件存放在多处路径,读者完全可以将其移到一个地方,然后只配置一个路径,头文件与dll文件同理。
第二步为指定引入的lib文件,第一步只是告诉了编译器lib文件在哪里,并没有具体引入lib文件。在Linker->Input->Additional Dependencies中配置。
在这里插入图片描述
在这里插入图片描述
当lib文件很多,不知道需要引入哪一个lib文件时,可以通过Far Manager工具进行查找。如上图报错信息可以看到??0Standard_OutOfMemory@@QEAA@QEBD@Z这种字样。打开Far Manager,进入lib文件夹使用Find file命令对其进行查找,就可以锁定lib文件。
在这里插入图片描述
当然也可以直接将所有lib文件全部引入。

2-3 .dll

.dll是动态链接库,当编译采用动态链接时,外部库就不会打包到程序的exe文件,但程序的执行必须知道外部库里面的函数定义,dll文件就存放了外部库的函数信息。dll配置错误,会在程序运行的时候出现无法找到dll错误:
在这里插入图片描述
配置dll有三种方式,第一种是将缺失的dll文件拷贝到项目文件夹中。外部库的dll文件一般存放于bin文件夹。
在这里插入图片描述
第二种是通过将dll的存放位置配置到系统的环境变量中(不推荐这种做法)。查看高级系统设置->环境变量->Path,然后编辑。
在这里插入图片描述
第三种做法是在项目属性中配置项目的Path:Debugging->Environment
在这里插入图片描述
在这里面写入dll的存放路径,写入格式为:

PATH=C:\Program Files\opencascade\install\win64\vc14\bind;%PATH%

如果有两个路径,写入格式为:

PATH=C:\Program Files\opencascade\install\win64\vc14\bind;C:\Program Files\opencascade\VTK-9.3.1\install\bin;%PATH%

这里要注意一个问题,项目自身可能会有默认的PATH。
在这里插入图片描述
这里我创建的QT项目会指向QT的bin目录,这时候我再添加PATH=C:\Program Files\opencascade\install\win64\vc14\bind;%PATH%同样会出现dll错误:
在这里插入图片描述
这时候要取消勾选inherit from parent or project defaults然后复制默认的PATH将其与我们需要添加的PATH结合起来,再写入:
在这里插入图片描述


http://www.kler.cn/a/313009.html

相关文章:

  • 弹性盒子布局(Flexbox)详细介绍
  • WPF 应用程序中使用 Prism 框架时,有多种方式可以注册服务和依赖项
  • 论文分享:DiskANN查询算法
  • 【大数据学习 | HBASE高级】region split机制和策略
  • 统信UOS开发环境支持Electron
  • 计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
  • 【双语新闻】AGI安全与对齐,DeepMind近期工作
  • Instagram全面升级“青少年账号”保护措施,除了信息分类过滤,还应从根源加强内容审核
  • 八、explicit关键字在C++中的用法
  • 【第十三章:Sentosa_DSML社区版-机器学习聚类】
  • dedecms——四种webshell姿势
  • 2024年“华为杯”研赛第二十一届中国研究生数学建模竞赛解题思路|完整代码论文集合
  • DataX--Web:图形化界面简化大数据任务管理
  • 开发易忽视的问题:InnoDB 行锁设计与实现
  • Pycharm中虚拟环境依赖路径修改
  • LeetCode 面试经典150题 67.二进制求和
  • istio中使用serviceentry结合egressgateway实现多版本路由
  • JFinal整合Websocket
  • 大模型中常见 loss 函数
  • 关于“华为杯”第二十一届中国研究生数学建模竞赛赛题下载及提交作品的重要提醒
  • pytorch实现RNN网络
  • Vue使用qrcodejs2-fix生成网页二维码
  • 解决 GitLab CI/CD 中的 `413 Request Entity Too Large` 错误
  • 生信初学者教程(五):R语言基础
  • 【计算机网络篇】电路交换,报文交换,分组交换
  • BGP实验