【问题标题】:Link two Projects in Visual Studio on Linux在 Linux 上的 Visual Studio 中链接两个项目
【发布时间】:2018-04-02 11:06:09
【问题描述】:

我在 Visual Studio Community 2017 中为我的 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 系统上的两个项目。

提前致谢。

【问题讨论】:

    标签: c++ linux visual-studio linker


    【解决方案1】:

    4 月 4 日 想到这里,我不知道我是否需要退后一步。

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

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

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

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

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

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

    【讨论】:

    • 感谢您的快速回复。
    • 它有效并且似乎是一个可靠的解决方案。但是,仍然存在一个问题:我必须简单地编写路径(例如'/home/pi/projects/solution/projectA/bin/ARM/Debug')并且不能使用'$(RemoteRootDir)/$(SolutionName)/ projectA/bin/$(Platform)/$(Configuration)' 即使它与 VisualStudio 属性预览中的路径完全相同。
    • 参数扩展有一些不足之处,但是: %24(echo $(RemoteRootDir)/projectA/bin/$(Platform)/$(Configuration)) 应该做你想做的。查看构建日志以查看已执行的替换并在需要时进行调整。 %24 是一个 $ 字符,必须通过 Linux 远程传递。
    • 这对我来说并没有完全解决,但是平台和配置参数确实可以满足我的目的:'/home/pi/projects/$(SolutionName)/projectA/bin /$(平台)/$(配置)/'。再次感谢您的快速帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多