2017-10-04 8 views
0

私はLinux上で動作するモジュールを持っており、クライアントの1人はウィンドウ上でそれを望んでいます。 似たような話題(https://ask.slashdot.org/story/04/08/12/1932246/cygwin-in-a-production-environment)については非常に良い議論がありますが、私はプロダクションのcygwinを避けるために傾いていると思っていますが、約13年前の議論、問題があったかもしれませんが、約13年後にcygwinが改善、プロダクションでの使用に適しています。cygwinでコンパイルされたlinuxコードをWindows環境で使用するのはいいですか?

コードはちゃんとコンパイルされているので、Windowsネイティブコードでやり直すのではなく、cygwinでうまく動作するように思えます。 しかし、実際には解決できない既知の問題があり、人々が私が知りたいと思っている制作のためにそれを避けているのであれば。 コードはpthreads、no-waitのソケットを頻繁に使用します

+0

ライセンス条項を遵守してソースコードを提供する必要がある場合、Cygwinは問題ありません。 – tim18

答えて

1

私はCygwinをフェアビットで使用しましたが、ほとんど問題はないことがわかりました。報告された問題のいくつかを認識していますが、自分で経験したことはありません。 Cygwinのいくつかのものはであり、Linux上では同じコードよりも遅いです。私はこれをディレクトリスキャンで最もよく認識していますが、それだけではありません。人々はfork()が遅いと不平を言うが、それは実際には驚きではない。なぜなら 'フォーク'はWindowsのネイティブな概念ではないからだ。 fork()を使用してサブプロセスを起動しているのであれば、fork/execの全体を選択的にネイティブWindows APIの呼び出しに置き換えることができます。

Cygwinの潜在的な制限は、実行時にCygwinを必要とするか、少なくともCygwinインフラストラクチャを必要とすることです。 MinGWはこの制限を取り除くかもしれませんが、あなたのコード(例えば、ファイルの場所)に互換性関連の変更をたくさん残さなければなりません。私が最後に見た時、MinGWはCygwinと同様に広範なツールを持っていませんでしたが、多分多くの目的のためには十分です。

最近、Windows 10のLinux用Windowsサブシステム(WSL)が考えられます。Cygwin用に構築されたコードは、通常WSL上で変更せずにビルドされ実行されていますが、 CygwinとWSLの長所と短所を比較しました。

私はCygwin、MinGW、WSLのpthreadsには気づいていません。スレッドを使用する正確な方法によって問題が発生する可能性が高いと思います。それは私が試したことではないので、私はノーウェイトソケットの問題にコメントできません。

ちなみに、CygwinとMinGWの両方で、必要に応じてネイティブWindows APIやDLLの他の関数を呼び出すことができます。そのため、POSIX型関数とWin32 APIを使用する一種の「ハイブリッド」アプリケーションを作成する可能性があります。これは、Win32の機能を使った方がはるかに高速であることが判明した場合に役立ちます。これがWSLで可能であるかどうかはわかりません。

+0

ありがとう私はWSLもオプションであることを知らなかった、MinGW私はソケットがないと思う? – Pras

+0

だからわかった。 Cygwinの膨満を避けるためにMinGWを使用することの欠点は、Cygwinの膨らみを再実装することです。 WindowsソケットAPIは、ほとんどのアプリケーションでバークレーソケットを直接的に置き換えることができます。そのため、Linuxアプリケーションのソケットの使用をWindowsソケットに変換することは非常に難しいとは思っていません。しかし、私がそれをやらなければならないときにそれを言うのは簡単です;) –

+0

私の経験上、wslスクリプトはcygwinよりもメモリ不足の条件にさらされています。顧客がより多くの時間のかかる更新を受け入れることができれば、試してみる価値があるかもしれません。 – tim18

1

私は時間のかかるアップデートに関する私のコメントは、完全なWindowsアップデートとapt-getアップデートを実行する前に、深夜0時を過ぎるwsl スクリプトを実行する必要があると言います。 4時間ごとに個別のメモリ回復スクリプトを実行することは、部分的な解決策です。私は「唯一の」6GBのRAMを持っています。

関連する問題