C++静态库构建顺序咨询:graphics.lib等三库的编译依赖顺序
C++静态库构建顺序指南
这问题问得很实在,咱们从依赖关系入手,就能把构建顺序理得明明白白:
核心逻辑:先构建被依赖的基础库
你的三个静态库中,graphics.lib是另外两个库的核心基础——graphics_opengl.lib里的OpenGLGraphicDevice继承自graphics.lib的GenericGraphicDevice,OpenGLDeviceInfo继承自DeviceInfo;同理graphics_d3d.lib肯定也是基于graphics.lib的基类实现的。
所以构建顺序必须遵循先基础、后派生的原则:
第一步:先构建
graphics.lib
编译这个库的时候,只需要处理它自身的代码就行,不需要依赖另外两个库。完成后,它提供的基类定义会作为另外两个库编译的前提——毕竟编译器在编译派生类时,必须能找到基类的声明和定义才能正常工作。第二步:构建
graphics_opengl.lib和graphics_d3d.lib
这两个库之间没有互相依赖的关系,所以它们的构建顺序可以随意,谁先谁后都不影响结果。不过编译它们的时候,要确保编译器能访问到graphics.lib对应的头文件(也就是包含DeviceInfo和GenericGraphicDevice声明的头文件),不然派生类的代码会报“找不到基类”的编译错误。
额外小提示(链接阶段)
当你把这些库链接到最终的可执行文件时,要注意链接顺序:把依赖其他库的静态库放在前面,被依赖的放在后面。比如链接graphics_opengl.lib的时候,要写成:
graphics_opengl.lib graphics.lib
这样链接器才能正确找到派生类依赖的基类实现。
内容的提问来源于stack exchange,提问作者Hinchy




