在 Windows 上编译+分发 Linux 代码

Posted

技术标签:

【中文标题】在 Windows 上编译+分发 Linux 代码【英文标题】:compiling+distributing Linux code on Windows 【发布时间】:2012-07-03 15:29:08 【问题描述】:

我有一个更大的代码在 Linux 中运行,用 c++ (c++11) 和 python 编写并使用许多库(VTK、boost、pyqt、OpenGL)并编译为 python 扩展模块(以及这些模块的插件)和纯python模块(主程序是python脚本)。该代码是跨平台的(有一些例外,例如dlopengettimeofday,可以通过#ifdef 替换为 Windows 等效项)和编译器无关(它使用 -ansi 编译,以及一些特定于编译器的东西像__attribute__ 也可以在需要时被替换)。

我正在尝试在 Windows 上进行编译,但我完全不知道应该如何进行(我在 Linux 中的开发经验相当丰富,但自 90 年代末以来我就没有使用过 Windows)。

我应该选择 mingw 还是 MSVC 编译器?我会更好地交叉编译吗?我是否需要通过从网上下载安装程序来“手动”安装依赖项?我也需要编译这些吗?是否有包含文件的标准路径,还是要检测所有这些路径?如果我设法编译它,如何制作某种包(它是纯 Python 模块和共享库的捆绑包)?

我认为我不是第一个尝试了解它在 Windows 下如何工作的人(我认为我被包管理器和 Linux 中所有对开发人员友好的东西宠坏了),也许在某个地方有一个有用的参考。

【问题讨论】:

为什么要关闭?这是一个很好的问题,IMO.. MSVC 对 C++11 的支持很烂,所以除非你使用了一半的语言特性(你不要过多地使用可变参数模板、统一初始化等),否则你应该使用 MinGW。跨度> c++11 在 Windows 中非常参差不齐。我建议尝试 Visual Studio 12 发布候选,因为它包含 c++11。祝你好运 我无法回答所有这些问题(我也是 Linux 大佬),但不要使用 MSVC。使用 MinGW 或 GCC 的任何其他端口。 GCC 有很好的 C++11 支持,但如果 MSVC 的支持看起来像 IE 对 html5 的支持,请不要使用它。 感谢 MinGW 的建议,我会坚持下去(例如,必须进行统一初始化)。如果我使用 MinGW 编译,我是否会随代码一起发布 python 和所有库(boost、vtk)? 【参考方案1】:

我认为您在这里的选择取决于您在 Windows 下编译的目标。您是否准备让其他可以选择他们的开发平台的开发人员参与进来?您想使用不同的编译器来生成额外的警告吗?您是否希望在 Windows 平台上部署应用程序?提出这类问题有助于您做出更明智的决定。

这里有一些建议...

尝试 MSVC 并没有什么坏处。 2010 express edition 是最后一个支持标准 C++ 开发的免费版本。未来的快速版本仅适用于“Metro”应用程序。我会根据你的 Windows 开发目标权衡它并做出相应的选择。 对于跨平台构建,看看您是否可以实施标准化的构建系统,例如 CMake 或 SCons。 无论最终决定如何,我都不会附带依赖项。开源要求开发人员单独下载依赖项是标准做法。只要确保包含当前稳定版本与您的应用程序不向后兼容的任何内容的版本信息。 (或者更好的是,修复这些问题,以便您从 3rd 方代码中的最新修复程序中受益。)Python 至少应该是开发人员的责任。它是要安装的,pywin32 扩展将在 Windows 安装的系统注册表中注册 COM 项。 就招募开源开发人员而言,您可能会发现要求在开发人员的计算机上安装 MinGW 会阻碍一些专门的 MSVC 用户从事该项目。

【讨论】:

开发在 Linux 上进行,Windows 仅用于部署。我现在正在考虑通过M cross environment 进行交叉编译。 SCons 已经在使用,但是依赖关系更多的是一个问题(例如,python/msvc 似乎与 Python/MinGW 不兼容),我想尽可能地为客户简化安装(这不是开发人员)。 顺便说一句,未来的免费 MSVC 仅限于地铁这一事实是反对它的一个强项。我会坚持使用 MinGW。微软越少越好;它们似乎根本无法预测。

以上是关于在 Windows 上编译+分发 Linux 代码的主要内容,如果未能解决你的问题,请参考以下文章

VRPN C++ 代码可在 Linux 上编译,但不能在 Windows 上编译

windows上编译linux程序代码需要用到的头文件

在 Windows 和 Linux 上编译 C++:ifdef 开关 [重复]

如何在 Windows 上编译 nDPI 库?

rust交叉编译配置:windows上编译linux可执行程序

在 Windows 上编译的 Matlab 应用程序是不是可以在 Linux 下运行?