【问题标题】:How to compile in Visual Studio 2010 for Linux如何在 Visual Studio 2010 for Linux 中编译
【发布时间】:2012-02-07 05:27:34
【问题描述】:

是否可以使用 Visual Studio 2010(不一定是 MSVC 编译器)在 Windows 上开发 C/C++ 并获得可以上传到 linux 机器(并运行它)的二进制文件?

我检查的可能性是使用 MinGW 或类似的东西来让 Windows 二进制文件执行与 linux 二进制文件相同的操作,但我在获取所有需要的库 (posix) 的所有 win 端口时遇到问题。

编辑:我不想让 windows 二进制文件在 linux 上运行。因此,我需要一个原生 linux 二进制文件。

【问题讨论】:

  • 是的,你可以。您只需要找到(或自己编写)自定义构建任务来调用您的交叉编译器。此外,您必须找到(或自己构建)一个交叉编译器。这两个步骤都不是特别容易自己做的,但如果你有耐心去做,它们是很可行的(我都做了;总共花了几个星期)。但是,如果您正在为 Linux 构建软件,那么在 Linux 上编译它会容易得多。
  • 除了编辑器和运行make 的能力之外,您希望使用IDE 的哪些功能?
  • @James:你会推荐什么交叉编译器?
  • @schoetbi:您需要为您的目标构建一个。交叉编译器应针对目标系统上使用的相同 C 运行时和标准库构建。我已经使用crosstool 来针对旧版本的 RHEL,它工作正常,尽管即使使用自动化脚本,您也可能需要至少几天的调整和重建才能获得针对特定目标的工作交叉编译器。您的里程可能会有所不同。
  • [在我看来,您最好编写尽可能多的平台中立代码,并使用像 CMake 这样的跨平台构建系统在两个平台上构建。]

标签: c++ linux visual-studio-2010


【解决方案1】:

谢谢大家!我的解决方案总结如下:

  1. 使用 Visual Studio 开发独立于平台的代码
  2. 使用运行 Debian 或 RHEL 的 Virtual Box 执行最终构建(适用于 Linux)
  3. Virtual Box 中的 IDE 是带有 CDT 插件的 Eclipse
  4. 使用 CMake 为 Visual Studio 和 Eclipse CMake 生成项目文件

【讨论】:

  • 你好。可能,主题很旧,但是我可以请您提供有关您的解决方案的更多详细信息吗?例如,什么是“开发独立于平台的代码”。可能我现在和你 4 年前有同样的问题。希望技术变革也确实改变了您的工作流程。我梦想为不同的平台使用一个代码库。
  • 这意味着你需要一个操作系统抽象层。您可以使用一个现有的,或者将您需要的每个操作系统调用封装在一个包装函数中。也许你看看POCO C++
【解决方案2】:

我对此有一些看法,但如果没有更多信息,我很难权衡。为什么要在 Visual Studio 中开发?您的目标是什么类型的应用程序?是否已经存在一定程度的代码成熟度?是否存在影响此决定的团队经验问题?

我的下意识反应是,在开发要在 Linux 环境中使用的应用程序时,听起来您希望在开发人员生产力方面受益于 VS 2010 开发环境。如果我遇到这种情况,我可能会在基于 Linux 的常量集成服务器上使用 mono 来定位便携式 C#,并进行短期签入(大约一小时一次应该没问题),以便清除不可移植的代码.但是,您指定了 C++,因此假设这是一个要求,这可能不适合您。

C++ 是硬性要求,Visual Studio 是硬性要求,您发布的计划听起来不错。此外,我肯定希望在目标平台上运行一个持续的集成服务器,并进行短期签入,以防止对不可移植代码进行任何重要的代码开发。如果您拥有 MSDN 许可证(并在 Visual Studio 和 Eclipse 中提供工具集成),TFS 可以处理此问题。还有很多其他不错的选择,但您似乎被 Microsoft 堆栈所吸引。

【讨论】:

  • 为此 +1。问题是我们想要开发一个实时应用程序(这就是为什么 C# 不是一个选项)。不需要 TFS,因为我们为每个开发人员使用带有本地 git 存储库的 SVN/Jenkins。集成测试总是好的。 Jenkins 还可以启动虚拟机来测试软件,例如:linux 平台。谢谢。
  • 您的目标平台是 Redhawk 吗?这听起来像是我的日常工作。当我说持续集成时,我的意思是让开发人员做一些小改动,大约每小时(或更频繁地)签入一次,并让签入启动产品的自动完整构建,如果构建失败,立即通知开发人员。我不熟悉 Jenkins,也许它提供了这种能力。最好在每个代码模块之前都有一个测试用例,但这是题外话。
  • 不,我不认识红鹰。 CI:这正是 Jenkins 可以为你做的。 jenkins-ci.org
【解决方案3】:

不,我认为您不能使用 Visual Studio 编译器交叉编译目标 Linux/x86。

(不了解Windows,但听说微软对Linux不是很友好,也不开发交叉编译器)

为 Linux/x86 编译代码的最简单方法是安装完整的 Linux 发行版(在您的笔记本电脑上,或者可能在虚拟机中)。

您或许可以编译(用于 Windows 主机)GCC 和 binutils 以获得针对 Linux/x86 并在 Windows 上运行的交叉编译器,但我不会向新手推荐。

(如果整个团队只知道 Windows,则需要花费资源让团队学习 Linux,如果每个开发人员的桌面上都有一个 Linux 系统,那就更容易了。当然学习需要时间,努力,并且有一定的成本;而且大部分的努力都会花在学习 Linux 下的编程上,例如 Linux 系统调用和常用的 API 和库;所以保留 Visual 不会有太大的收获,而且会花费你!)支持>

【讨论】:

  • 正如我所说,我不需要使用 MSVC。有没有一个项目可以让 allrady 获得这样的跨工具链?
  • 我不使用 Windows,所以我不是最好的人选。但是,我从来没有听说过这样的跨工具链以打包的二进制形式广泛分布在 Windows 上。 我强烈建议您在计算机上安装 Linux(您可以将其安装在单独的磁盘分区上 - 它会与 Windows 共存,并且您将在启动时选择要启动的操作系统 -、或在虚拟机中)。
猜你喜欢
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 2020-04-02
  • 2011-04-26
  • 2015-06-30
  • 1970-01-01
相关资源
最近更新 更多