我需要添加到项目中以包含库?

时间:2014-08-14 18:23:02

标签: c++ c visual-studio

今天我对c / c ++中包含库的工作原理感到困惑。在某些地方,我是红色的,包括一个文件只是用该文件中的代码替换#include语句,而在其他地方我已经生成了.lib文件,我需要链接它们。此时我没有想知道该怎么想。

假设我有库A,库B和可执行文件C.所有单独的项目,但在同一个解决方案中,都有.h和.c文件,还没有.lib文件,只是为了清楚。库B需要库A,可执行文件C需要库B才能运行。

实现这一目标的正确方法是什么?显而易见的一个是将所需标头的头目录添加到依赖项目的“附加包含目录”中,但那么呢?

  1. 我是否添加了对所需项目的引用?
  2. 我是否将其标记为依赖于解决方案依赖项管理器?
  3. 我是否将假设的.lib文件及其出现的目录添加到链接器设置中?
  4. 我是否会对立即依赖这些资源的项目执行这些操作,或者这个依赖项是否继承在引用此项目的其他项目中? (例如,如果B需要A和C需要B,那么C需要A和B)

1 个答案:

答案 0 :(得分:1)

正如您所说,首先要做的是设置每个项目的包含目录,这样每个项目都可以看到它所需的.h头文件。头文件只包含声明库中包含的函数(和导出变量)的名称和参数的代码。这使您可以编写引用这些函数的代码,它将编译

现在你需要通过告诉它在哪里找到实际的函数实现来帮助 linker

艰难(但有时有用)的方式

  

2.我是否将其标记为依赖于解决方案依赖关系管理器?

从技术上讲,您不需要将项目链接在一起,但您会发现它很有帮助。正确设置依赖关系(即项目C依赖于项目B,项目B依赖于项目A)告诉Visual Studio在您点击" build all"时构建项目的顺序。依赖关系还告诉它在进行更改时需要重建哪些项目。例如。如果你改变了项目B中的某些东西并重建,它知道它还需要重建项目C,而不是项目A.

  

3.我是否将假设的.lib文件及其出现的目录添加到链接器设置中?

是。 .lib文件包含构建最终可执行文件所需的实际函数实现。

  

4.我是否会对那些立即依赖这些资源的项目执行这些操作,或者这个依赖项是否继承在引用此项目的其他项目中? (例如,如果B需要A和C需要B,那么C需要A和B)

要么。在最终的可执行文件C链接之前,它们实际上并未链接在一起,因此您只需将A和B库添加到C链接器设置即可。或者,您可以将lib A添加到项目B链接器设置,将B添加到C链接器设置,并且链接器将计算出“继承的”#39;要求。

简单(但控制力较弱)的方式

现在是好消息......

  

1.我是否添加了对所需项目的引用?

您根本不需要使用参考文献。但是如果你设置了引用(因此C引用了B,而B引用了A),那么Visual Studio会为你排序依赖关系,构建顺序和链接器路径!因此,如果您这样做(1),您不必担心您的问题(2),(3)或(4)。有时您可能需要更细粒度的控制,因此了解正在发生的事情"引擎盖下是非常有用的。