在 windows 中使用在 cygwin 上编译的 linux 代码用于生产是否可以?
Is it fine to use linux code compiled on cygwin for production in windows?
我在 linux 上有一个工作模块,其中一位客户想要在 windows 上使用它。
这里有关于类似主题的非常好的讨论(https://ask.slashdot.org/story/04/08/12/1932246/cygwin-in-a-production-environment),我猜它倾向于避免将 cygwin 用于制作,但它的讨论早了大约 13 年,可能存在问题但在大约 13 年内我希望 cygwin 可能已经改进,成熟,适合生产使用。
代码编译得很好,似乎在 cygwin 下工作正常,因此很想继续使用它而不是在 windows 本机代码中重做。
但是如果真的有任何无法解决的已知问题并且人们正在避免它用于制作我想知道。
该代码大量使用 pthreads,sockets in no-wait
我用过一些 Cygwin,发现它基本上没有问题。我知道一些报告的问题,但我自己没有经历过。 Cygwin 上的一些东西 比 Linux 上的相同代码慢 多 —— 我在目录扫描中注意到这一点最多,但这可能不是唯一的事情。人们抱怨 fork()
速度慢,但这并不奇怪,因为 'forking' 不是 Windows 中的原生概念。如果您只是使用 fork()
来启动子进程,那么可以想象整个 fork/exec 事情可以有选择地替换为调用本机 Windows APIs.
Cygwin 的一个潜在限制是它在 运行 时需要 Cygwin,或者至少需要一部分 Cygwin 基础设施。 MinGW 可能会删除此限制,但代价是让您在代码中进行大量与兼容性相关的更改(例如,文件位置)。我上次查看时,MinGW 也没有像 Cygwin 这样广泛的工具,但它可能足以满足许多用途。
我想现在考虑的另一种可能性是 Windows Windows 10 上 Linux (WSL) 的子系统。我发现为 Cygwin 构建的代码通常会构建和 运行s 在 WSL 上没有变化,但我还没有真正弄清楚 Cygwin 和 WSL 的相对优势和劣势是什么。
我没有注意到 Cygwin、MinGW 或 WSL 中的 pthreads 问题;尽管我想任何问题都可能取决于您使用线程的确切方式。我无法对无等待套接字问题发表评论,因为我没有尝试过。
顺便说一下,如果需要,Cygwin 和 MinGW 都允许您调用本机 Windows API 和 DLL 中的其他函数。因此存在创建一种使用 POSIX 类型函数以及 Win32 API 的 "hybrid" 应用程序的可能性。如果事实证明使用 Win32 功能某些事情要快得多,这可能会有用。我不确定 WSL 是否可行。
我应该说,我关于耗时更新的评论指的是需要执行完整的 Windows 更新以及在 运行 wsl 之前执行 apt-get 更新
午夜过后的脚本。 运行 每 4 小时左右执行一次单独的内存恢复脚本是部分解决方案。我有 "only " 6GB 内存。
我在 linux 上有一个工作模块,其中一位客户想要在 windows 上使用它。 这里有关于类似主题的非常好的讨论(https://ask.slashdot.org/story/04/08/12/1932246/cygwin-in-a-production-environment),我猜它倾向于避免将 cygwin 用于制作,但它的讨论早了大约 13 年,可能存在问题但在大约 13 年内我希望 cygwin 可能已经改进,成熟,适合生产使用。
代码编译得很好,似乎在 cygwin 下工作正常,因此很想继续使用它而不是在 windows 本机代码中重做。 但是如果真的有任何无法解决的已知问题并且人们正在避免它用于制作我想知道。 该代码大量使用 pthreads,sockets in no-wait
我用过一些 Cygwin,发现它基本上没有问题。我知道一些报告的问题,但我自己没有经历过。 Cygwin 上的一些东西 比 Linux 上的相同代码慢 多 —— 我在目录扫描中注意到这一点最多,但这可能不是唯一的事情。人们抱怨 fork()
速度慢,但这并不奇怪,因为 'forking' 不是 Windows 中的原生概念。如果您只是使用 fork()
来启动子进程,那么可以想象整个 fork/exec 事情可以有选择地替换为调用本机 Windows APIs.
Cygwin 的一个潜在限制是它在 运行 时需要 Cygwin,或者至少需要一部分 Cygwin 基础设施。 MinGW 可能会删除此限制,但代价是让您在代码中进行大量与兼容性相关的更改(例如,文件位置)。我上次查看时,MinGW 也没有像 Cygwin 这样广泛的工具,但它可能足以满足许多用途。
我想现在考虑的另一种可能性是 Windows Windows 10 上 Linux (WSL) 的子系统。我发现为 Cygwin 构建的代码通常会构建和 运行s 在 WSL 上没有变化,但我还没有真正弄清楚 Cygwin 和 WSL 的相对优势和劣势是什么。
我没有注意到 Cygwin、MinGW 或 WSL 中的 pthreads 问题;尽管我想任何问题都可能取决于您使用线程的确切方式。我无法对无等待套接字问题发表评论,因为我没有尝试过。
顺便说一下,如果需要,Cygwin 和 MinGW 都允许您调用本机 Windows API 和 DLL 中的其他函数。因此存在创建一种使用 POSIX 类型函数以及 Win32 API 的 "hybrid" 应用程序的可能性。如果事实证明使用 Win32 功能某些事情要快得多,这可能会有用。我不确定 WSL 是否可行。
我应该说,我关于耗时更新的评论指的是需要执行完整的 Windows 更新以及在 运行 wsl 之前执行 apt-get 更新 午夜过后的脚本。 运行 每 4 小时左右执行一次单独的内存恢复脚本是部分解决方案。我有 "only " 6GB 内存。