在Linux上的Visual Studio中链接两个项目

时间:2018-04-02 11:06:10

标签: c++ linux visual-studio linker

我在2017年Visual Studio社区中为我的Raspberry Pi(一个远程Linux系统)提供了一个远程解决方案,它由两个C ++项目组成。 由于Project_B依赖于Project_A。我在 Solution-> Properties-> Common Properties-> Project Dependencies 下添加了适合的项目依赖项。 项目B中项目A的所有包括声明如下:

#include "../Project_A/header.h"

(它们在编译时应该是正确的)

当我构建Project_B时,Project_A编译并链接(根据输出视图)并编译Project_B但链接器崩溃,因为它无法从Project_A中找到函数的定义。 有时,整个IDE崩溃并需要重新启动。

仅编译和链接Project_A工作正常。 作为一种解决方法,我已将所有文件从Project_A复制到Project_B,并相应地修改了包含并删除了项目依赖项。

就像那样,它有效。

但是,我希望有一个工作,干净的解决方案,用于在Visual Studio中的远程Linux系统上链接两个项目。

提前致谢。

1 个答案:

答案 0 :(得分:0)

4-APR 考虑到这一点,我想知道我是否需要退后一步。

Visual Studio项目需要一堆源文件并创建一个(我们现在将其保持简单)目标,例如可执行文件。它还会创建几个中间体,最重要的是目标文件。

那你如何在另一个项目中使用一个项目的功能?最简单的方法是source include,它就像你使用标题一样工作,将 projectB 中的源添加到 projectA 。不是最有效的解决方案,它可能会变得混乱,但它会工作。 最常见的方法是将 projectB 构建到库中。然后 projectA 创建可执行文件,链接到 projectB 库。 要创建 projectB 的库,请将项目类型设置为静态库,并将projectA链接到它;这就是我原来的答案。

===============

Solution->Properties->Common Properties->Project Dependencies允许您指定构建顺序,即 projectA 依赖于 projectB ,因此应首先构建 projectB 。它不会为编译器和链接器创建跨项目引用。

您必须告诉 projectA 在Pi上找到 projectB 的标题和二进制文件的位置。对于标题,您可以像使用相对路径一样使用相对路径,但在Additional Include Directories下的C/C++ - General中指定 projectB 文件的位置会更为通用VS项目属性。

对于库,您必须在项目属性中的Library Dependencies下指定Linker - Input,在Additional Library Directories下指定Linker - General。或者,对于同一解决方案中的项目,您可以在 projectA 下的 projectB 中添加Reference