Visual Studio 2022创建动态库和静态库
本文介绍了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
它们之间的关系:
- 编译阶段:
附加包含目录
帮助编译器找到头文件 - 链接阶段:
附加库目录
帮助链接器找到库文件位置,附加依赖项
告诉链接器具体要链接哪些库
最佳实践建议:
- 使用相对路径(如
$(SolutionDir)
)而非绝对路径,方便项目迁移 - 对于大型项目,考虑使用属性表(.props)来统一管理这些设置
- 调试时如果出现”未找到头文件”错误,检查附加包含目录;出现”无法解析的外部符号”错误,检查附加库目录和附加依赖项
为什么这样写是好习惯
- 跨机器兼容性:无论项目被复制到什么位置都能正确找到路径
- 团队协作友好:不同开发者可以有不同的本地路径,但都能正确编译
- 清晰的项目结构:明确将第三方库放在
external
目录是常见做法