c - 在 windows 中使用在 cygwin 上编译的 linux 代码进行生产是否可以?

标签 c cygwin

我在 Linux 上有一个工作模块,其中一位客户希望它在 Windows 上运行。 这里有关于类似主题的非常好的讨论(https://ask.slashdot.org/story/04/08/12/1932246/cygwin-in-a-production-environment),我猜它倾向于避免在生产中使用 cygwin 但它的讨论早了大约 13 年,可能存在问题但在大约 13 年内我希望 cygwin 可能得到改进,成熟且适合生产使用。

代码编译得很好,似乎在 cygwin 下工作正常,因此很想继续使用它而不是在 Windows native 代码中重做。 但是如果真的有任何无法解决的已知问题并且人们正在避免它用于制作我想知道。 该代码在无等待中大量使用 pthreads、sockets

最佳答案

我用过 Cygwin 不少,发现它基本上没有问题。我知道一些报告的问题,但我自己没有经历过。 Cygwin 上的某些东西比 Linux 上的相同代码慢 很多 -- 我在目录扫描时最常注意到这一点,但这可能不是唯一的事情。人们提示 fork() 运行缓慢,但这并不奇怪,因为“ fork ”并不是 Windows 中的原生概念。如果您只是使用 fork() 来启动子进程,那么可以想象整个 fork/exec 可以有选择地替换为对 native Windows API 的调用。

Cygwin 的一个潜在限制是它在运行时需要 Cygwin,或者至少需要一部分 Cygwin 基础设施。 MinGW 可能会删除此限制,但代价是让您在代码中进行大量与兼容性相关的更改(例如,文件位置)。我上次查看时,MinGW 也没有像 Cygwin 这样广泛的工具,但它可能足以满足许多用途。

我想最近要考虑的另一种可能性是 Windows 10 上的 Windows Linux 子系统 (WSL)。我发现为 Cygwin 构建的代码通常在 WSL 上无需更改即可构建和运行,但我还没有真正想到看看Cygwin和WSL的相对优势和劣势是什么。

我没有注意到 Cygwin、MinGW 或 WSL 中的 pthreads 问题;尽管我想任何问题都可能取决于您使用线程的确切方式。我无法评论无等待套接字问题,因为我没有尝试过。

顺便说一下,如果需要,Cygwin 和 MinGW 都允许您调用 native Windows API 和 DLL 中的其他函数。因此存在创建一种使用 POSIX 类型函数和 Win32 API 的“混合”应用程序的可能性。如果事实证明使用 Win32 功能某些事情要快得多,这可能会有用。我不确定 WSL 是否可行。

关于c - 在 windows 中使用在 cygwin 上编译的 linux 代码进行生产是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46557145/

相关文章:

c - typedef 指针常量怪异

c - 如果 a 的值为 5,a++ + a 的值是多少?

c - 构建 mlt 时,Cygwin 中对 WinMain 的 undefined reference

linux - bash 启动时更改目录

awk - 如何用 awk 交换最后两列对?

c++ - 如何使用 coc-clangd/coc-nvim 手动(无需键绑定(bind))搜索源代码中的符号?

c - 如何初始化外部RAM中的变量?

c - 从 C 创建 exe 时出现问题

usb - 如何在 Cygwin 中使用 COM 和 USB 端口?

c++ - 今天的主流编程语言主要使用动态还是静态(词法)作用域?