当前位置: 首页 > 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.hskmm.com/?act=detail&tid=394

相关文章:

  • 软件
  • Laravel PHP 忘记密码如何重置(创建新管理员账号)
  • 打工人必看!昆工MBA“项目管理”杀疯了
  • 第一章 逻辑代数基础 - Wisdom
  • DVectorT虐哭ListT
  • 201912_BUUCTF_Base64隐写
  • 软考达人-案例分析
  • kettle插件-sqlserver cdc插件,从sqlserver获取实时数据so easy,早早下班
  • golang netpoll 底层原理
  • manim如何按绝对时间管理动画
  • MATLAB R2025a安装教程和资源(中文版)
  • Xmanager Power Suite使用教程 - Invinc
  • try hack me.md
  • Snapshot-based State Replication 基于快照的状态复制网络框架,快照同步
  • Transformer通俗讲解
  • Ubuntu 安装微信
  • Ubuntu 安装截图软件 flameshot
  • Kali连接postgreSQL失败(已解决)
  • 主存储器和cpu的链接
  • 7. LangChain4j + 记忆缓存详细说明 - Rainbow
  • 英语_阅读_water protection team_待读
  • 滑动窗口(不与单调队列结合的总结)
  • Codeforces Round 1048 (Div 2)
  • 9.9未完成
  • 9.9日总结
  • 202205_宁波市赛_Cr4ck2
  • GitHub Copilot代码审查大升级!路径级指令+组织级规范,开发者效率再提升!
  • 20250909 GOJ 模拟赛
  • 在AI技术唾手可得的时代,挖掘新需求成为制胜关键——某知名语音识别框架需求洞察
  • SOS dp(高维前缀dp)