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

使用 Visual Studio 2022 创建动态库和静态库 - Invinc

本文介绍了Windows环境下使用Visual Studio 2022如何创建和使用静态库和动态库。


一些概念

常用宏

含义 示例
$(SolutionDir) | 当前解决方案(.sln 文件)所在的目录路径 | $(SolutionDir)external\include
$(ProjectDir) | 当前项目文件(.vcxproj)所在目录 | $(ProjectDir)libs\
$(Configuration) | 当前配置名称(Debug/Release) | $(SolutionDir)output\$(Configuration)\
$(Platform) | 当前平台名称(Win32/x64) | lib\$(Platform)\

在 VS 属性页中,这些宏会被自动展开显示实际路径,可以在项目属性的任意路径框中点击下拉箭头 -> 编辑 -> 点击"宏>>"按钮查看所有可用宏

$(SolutionDir) 是 VS 的预定义宏,表示:

  • 当前解决方案(.sln 文件)所在的目录路径;

  • 自动包含结尾的反斜杠\

例如:如果解决方案在 C:\Projects\MyApp\,则 $(SolutionDir) 展开就是 C:\Projects\MyApp\

完整路径 $(SolutionDir)external\include 表示:

在解决方案目录下寻找 external 子文件夹,然后在其中寻找 include 子文件夹,示例展开结果:C:\Projects\MyApp\external\include\

项目属性选项

C/C++ > 常规 > 附加包含目录

  • 作用:指定编译器在编译阶段查找头文件(.h/.hpp)的额外目录路径
  • 使用场景:当你的项目使用第三方库的头文件时,如果这些头文件不在项目目录或默认包含路径中
  • 示例:D:\libraries\boost\include;$(SolutionDir)external\include

链接器 > 常规 > 附加库目录

  • 作用:指定编译器在链接阶段查找库文件(.lib)的额外目录路径
  • 使用场景:当你的项目依赖第三方库时,如果这些库不在默认搜索路径中,就需要在这里添加它们的存放路径
  • 示例:D:\libraries\boost\lib

链接器 > 输入 > 附加依赖项

  • 作用:明确指定项目链接时需要使用的库文件名(.lib)
  • 使用场景:列出所有需要链接的库文件,包括第三方库和系统库
  • 示例:opengl32.lib;glfw3.lib;assimp.lib

它们之间的关系

  • 编译阶段:附加包含目录帮助编译器找到头文件
  • 链接阶段:附加库目录帮助链接器找到库文件位置,附加依赖项告诉链接器具体要链接哪些库

最佳实践建议

  1. 使用相对路径(如$(SolutionDir))而非绝对路径,方便项目迁移
  2. 对于大型项目,考虑使用属性表(.props)来统一管理这些设置
  3. 调试时如果出现"未找到头文件"错误,检查附加包含目录;出现"无法解析的外部符号"错误,检查附加库目录和附加依赖项

为什么这样写是好习惯

  1. 跨机器兼容性:无论项目被复制到什么位置都能正确找到路径
  2. 团队协作友好:不同开发者可以有不同的本地路径,但都能正确编译
  3. 清晰的项目结构:明确将第三方库放在 external 目录是常见做法

静态库

待续...

http://www.gsyq.cn/news/1246.html

相关文章:

  • 软件
  • 打工人必看!昆工MBA“项目管理”杀疯了
  • 201912_BUUCTF_Base64隐写
  • 软考达人-案例分析
  • kettle插件-sqlserver cdc插件,从sqlserver获取实时数据so easy,早早下班
  • try hack me.md
  • 7. LangChain4j + 记忆缓存详细说明 - Rainbow
  • 在AI技术唾手可得的时代,挖掘新需求成为制胜关键——某知名语音识别框架需求洞察
  • 英语_阅读_raise awareness about water conservation_待读
  • [豪の学习笔记] 软考中级备考 基础复习#5
  • 02020212 .NET Core重难点知识12-服务定位器、.NET依赖注入示例
  • apache详细配置
  • 9.8总结
  • 在 AlmaLinux 9 使用 Podman 部署 Redis 7.4.5 并优化内核参数
  • 基于调度场算法将中缀表达式转换为后缀表达式
  • linux下安装pycharm时,中文无法显示的问题
  • Docker,Containerd配置私有Harbor仓库和Notary服务器
  • Ubuntu安装containerd
  • 我重新制作动画系统的思路
  • 港科 Tower A 宿舍凝水之谜
  • Transformer 模型(能理解“句子顺序”和“上下文”的神经网络架构)
  • 关于 cnpm 的安装
  • BOE(京东方)“照亮成长路”公益项目走进富平县 科技赋能教育树立可持续发展新标杆
  • K8S Ingress 和 Service的作用?
  • 通过pip的配置文件,来永久设置国内源‌
  • 用夏普比例和卡玛比率评估基金的性价比
  • 漏洞解析--CSRF
  • 第一篇随笔
  • CF1404D Game of Pairs
  • Office支持终止:如何防止宏灾难