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

Posted

技术标签:

【中文标题】在 Linux 上的 Visual Studio 中链接两个项目【英文标题】:Link two Projects in Visual Studio on Linux 【发布时间】: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 系统上的两个项目。

提前致谢。

【问题讨论】:

【参考方案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 /$(平台)/$(配置)/'。再次感谢您的快速帮助。

以上是关于在 Linux 上的 Visual Studio 中链接两个项目的主要内容,如果未能解决你的问题,请参考以下文章

无法从 Visual Studio 启动 gdb 以在 Windows 上的 Linux 子系统中远程调试 Linux C++ 项目

如何在 Chromebook 上的 Visual Studio Code 中向上或向下移动一行

如何在Linux中安装Visual Studio Code

2.6 visual studio开发linux程序

Visual Studio 2017 C ++ linux应用程序,标头未复制到目标

将 C# Stateful Service Fabric 应用程序从 Visual Studio 部署到 Linux