从Linux远程开发Visual C++应用程序

Jul*_*ger 7 linux windows ssh powershell visual-c++

通过SSH可以轻松地 Windows 进行 Linux 远程开发.

但是,另一种方式呢?我需要在Windows上构建和调试我的Visual C++应用程序,但我想在Linux系统上工作.

  1. 由于MSVC特定的库,通过MinGW进行交叉编译不起作用
  2. Windows上的Ubuntu是一个良好的开端,但我想在一个真正的Linux系统上工作
  3. RDP/VNC或类似的东西也没有帮助,因为我再次在Windows上工作
  4. 虚拟机也是如此

也许像Linux Powershell上的Powershell到Windows Powershell?

Cy *_*nol 4

我经常从 Linux(大多数情况下不是 MSVC)远程开发 Visual C# 应用程序,但是,像您一样,我想找到一种在远程 Windows 计算机上构建和调试 Windows 目标应用程序和库的方法,而无需使用 RDP 直接在框中工作、Visual Studio 等

如果没有更多关于您在 Linux 上开发的应用程序类型所喜欢使用的开发和调试工具的信息,就很难回答这个问题。我将尝试提供一般概述并更新您添加的有关工作流程的详细信息的答案。

Cygwin与MinGW 的 MSYS类似,为 Windows 提供了类 Unix 的环境。最重要的是,与 MinGW/MSYS 不同,Cygwin 包含 OpenSSH 服务器的实现,使我们能够通过 SSH 从 Linux(或任何其他具有 SSH 客户端的设备)连接到 Windows 机器。我们可以使用 Cygwin 的安装实用程序安装sshd软件包。连接后,Cygwin 默认将我们带入 Bash shell。有了这个能力,我们可以:

  • 通过 SSH 执行远程命令和脚本。
  • 使用我们最喜欢的 *nix 命令行文本编辑器(Vim、Emacs 等)编辑文件
  • 使用SSHFS在本地挂载远程文件系统(如果 Windows 共享不可用)。
  • 如果需要,转发或隧道端口。

通用 shell 的出现几乎使一切成为可能。除了 Linux 脚本和 Cygwin 程序之外,我们还可以从 Cygwin 的 shell 环境执行批处理文件、PowerShell 脚本和本机 Windows 可执行文件。

例如,我们可以从 SSH 会话命令行运行msbuild来构建 VC++ 应用程序,或者我们可以配置本地 GUI 编辑器或 Linux 中运行的 IDE,以便在单击“构建”按钮时通过 SSH执行msbuild 。

我们可以使用适用于 Linux 的 Windows 子系统(“WSL”,Windows 上的 Bash)在最新版本的 Windows 中设置类似的环境。我个人更喜欢 Cygwin,因为它具有更好的可移植性和易于配置。Cygwin 的sshd可以作为 Windows 服务运行,并且作为一个已建立的项目,Cygwin与 Windows 系统(用户帐户、文件系统、Windows API 等)集成得很好。

使用代码

我们可以根据我们的工具和命令行的舒适程度从多个工作流程中进行选择:

  1. 完全基于文本——所有工作都通过 SSH 会话执行
  2. 对远程文件系统中挂载的文件使用本地工具
  3. 使用本地工具并同步文件

我使用第一种方法。我是 Vim 的重度用户,因此我通过 SSH 连接到 Windows 计算机,使用 Cygwin 提供的工具和环境在命令行上完成工作。Linux 上常见的工具的可用性简化了许多在默认 Windows 控制台中难以完成的任务。我们可以编写 shell 脚本来自动执行 Visual Studio 通常为我们执行的任务。例如,我围绕mstest编写了一个包装器脚本,该脚本读取 XML 测试结果并以易于在终端中读取的格式输出它们。

如果我们更喜欢使用 GUI 编辑器或 IDE,我们可以在本地安装远程代码,以便工具可以读写文件,就好像它们是 Linux 计算机本地文件系统的一部分一样。我们可能仍然需要使用 SSH 来执行构建项目所需的命令,但许多编辑器允许我们将此命令配置为项目的“构建”操作。

有时远程文件系统太慢而无法进行有效编辑。在这些情况下,我们可以使用rsync等工具或编辑器的“保存时上传”功能(例如通过 SFTP)(如果可用)在 Linux 开发计算机和 Windows 主机之间同步文件。

调试

在我们尝试找到一种调试应用程序的方法之前,一切都运行得很好。截至目前,在处理 Visual C++ 项目时,还没有合理的替代品可以替代 Visual Studio 的调试器。我们可以使用MDbg调试在 CLR 上运行的托管 C# 应用程序,但不存在适用于 C++ 程序的类似工具。

我们可以尝试使用gdb(来自MinGW、Cygwin等)对原生二进制文件进行基本的、低级的调试,比如读取内存地址,但调试器尚不支持读取微软的调试符号,因此调试体验非常有限。Microsoft几年前开始记录PDB 格式,因此我们将来可能会看到一些兼容性。即便如此,仍需要很长时间才能产生一个令人满意的 Visual Studio 优秀调试工具的替代品。

对于调试,RDP 是目前我们最好的(也可能是唯一的)选择。为了获得更原生的体验,我们可以使用rdesktop(或其他 RDP 客户端)和Seamlessrdp运行 Visual Studio ,以创建 Visual Studio IDE 的单窗口 RDP 会话,而不是与我们正在使用的任何窗口管理器集成的完整桌面在Linux上使用。

有时,我们可以通过向将值输出到控制台或日志文件的应用程序添加跟踪来绕过启动完整的 Visual Studio 调试会话以实现简单的调试方案。在许多情况下,这比启动调试器要快。

我们还可以尝试使用为 Visual C++ 工具链配置的Eclipse CDT 调试器。这可能使我们能够使用 Linux 计算机上的 Eclipse 实例执行远程调试。我从未尝试过这种方法,并且我预计当应用程序链接到 Microsoft 的库时可能会出现一些问题。