You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C++静态库构建顺序咨询:graphics.lib等三库的编译依赖顺序

C++静态库构建顺序指南

这问题问得很实在,咱们从依赖关系入手,就能把构建顺序理得明明白白:

核心逻辑:先构建被依赖的基础库

你的三个静态库中,graphics.lib是另外两个库的核心基础——graphics_opengl.lib里的OpenGLGraphicDevice继承自graphics.libGenericGraphicDeviceOpenGLDeviceInfo继承自DeviceInfo;同理graphics_d3d.lib肯定也是基于graphics.lib的基类实现的。

所以构建顺序必须遵循先基础、后派生的原则:

  • 第一步:先构建graphics.lib
    编译这个库的时候,只需要处理它自身的代码就行,不需要依赖另外两个库。完成后,它提供的基类定义会作为另外两个库编译的前提——毕竟编译器在编译派生类时,必须能找到基类的声明和定义才能正常工作。

  • 第二步:构建graphics_opengl.libgraphics_d3d.lib
    这两个库之间没有互相依赖的关系,所以它们的构建顺序可以随意,谁先谁后都不影响结果。不过编译它们的时候,要确保编译器能访问到graphics.lib对应的头文件(也就是包含DeviceInfoGenericGraphicDevice声明的头文件),不然派生类的代码会报“找不到基类”的编译错误。

额外小提示(链接阶段)

当你把这些库链接到最终的可执行文件时,要注意链接顺序:把依赖其他库的静态库放在前面,被依赖的放在后面。比如链接graphics_opengl.lib的时候,要写成:

graphics_opengl.lib graphics.lib

这样链接器才能正确找到派生类依赖的基类实现。

内容的提问来源于stack exchange,提问作者Hinchy

火山引擎 最新活动