我需要添加什么到一个项目,包括库
What do I need to add to a project to include libraries?
今天我对如何在c/c++中包含库感到困惑。在某些地方,我发现包含文件只是用该文件中的代码替换#include语句,而在其他地方,我发现生成了。lib文件,我需要链接它们。在这一点上我不知道该怎么想。
假设我有库A,库B和可执行库c。所有独立的项目,但在相同的解决方案中,都有他们的。h和。c文件,没有。lib文件,只是为了清楚。库B需要库A,可执行库C需要库B才能运行
正确的方法是什么?最明显的方法是将所需头文件的头目录添加到依赖项目的"附加包含目录"中,但是接下来呢?
- 我是否添加对所需项目的引用?
- 我是否在解决方案依赖项管理器中将其标记为依赖项?
- 我添加假设的。lib文件和目录,他们将出现在链接器设置?
- 我是否对直接依赖于这些资源的项目做这些事情,或者这个依赖关系是在引用这个资源的其他项目中继承的?(例如,如果B需要A, C需要B,那么C需要A和B)
正如您所说,首先要做的是设置每个项目的包含目录,以便每个项目都可以看到它所需的.h头文件。头文件只包含声明库中包含的函数(和导出变量)的名称和参数的代码。这允许您编写引用这些函数的代码,并且它将编译。
现在您需要帮助链接器,告诉它在哪里可以找到实际的函数实现。
困难(但有时有用)的方法
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链接器设置中。或者,您可以将库A添加到项目B的链接器设置中,将B添加到项目C的链接器设置中,链接器将计算出"继承"的需求。
简单(但控制较少)的方法
现在是好消息…
1。我需要添加对所需项目的引用吗?
你根本不需要使用引用。但是如果你做了设置引用(所以C有对B的引用,B有对a的引用),那么Visual Studio就会为你整理依赖关系、构建顺序和链接路径!所以如果你做了(1),你就不需要担心你的问题(2),(3)或(4)。有时你可能需要更细粒度的控制,所以了解"幕后"发生了什么是有用的。
- 运行同一解决方案的另一个项目的项目
- 从链接列表c++中删除一个项目
- 仅从无序集合中删除一个项目
- 是否可以将 EXE 文件作为 lib 文件链接到另一个项目?
- 如何使用另一个项目命名空间?
- 如何在不创建新配置的情况下对两个不同解决方案使用的一个项目使用不同的 #defines
- 数组中无法解释的最后一个项目
- 单元测试类无法在我要测试的同一解决方案中的另一个项目中找到类
- 有没有更好的方法来检测向量中一个项目的多次出现?
- 是否有其他方法将.dll文件从一个项目复制到我的启动项目中的可执行文件旁边
- 如果我尝试将对话框从一个项目移动到另一个项目,我是否需要从 rc 文件中复制 DESIGNINFO、对话框信息和AFX_
- OpenCV:文件存储操作员">>"在一个项目中工作,但不在另一个项目中工作(在同一类上)
- 如何将另一个项目中用 C 编写的源代码包含在我自己的项目中,C++在 Visual Studio 中
- 什么 STL 算法可以确定容器中的一个项目是否满足谓词?
- 将过滤器中的所有.cpp和.h移动到另一个项目并更正其文件夹位置
- 在另一个项目中包括继承的类时,抽象类的链接器错误
- 创建在另一个项目中定义的类对象
- 我正在尝试在Eclipse中构建一个C 项目,但是即使在使用MINGW路径设置路径变量之后,也会获得构建错误
- 在包含相同项目的向量中删除一个项目
- 将多个原型文件包含在一个项目中会导致protobuf_AssignDescriptorsOnce()已经有一个主体