2010-01-18 21 views
15

我有cygwin的一些問題,有些問題:
關於Cygwin的[的Linux在Windows(插座,線,其他的編程和外殼的問題)

  1. 我可以使用Cygwin開發基於套接字的代碼?
  2. Cygwin有read()write()與文件描述符一起使用的函數嗎?
  3. 我可以在Cygwin中使用Pthread庫嗎?
  4. 在Cygwin中編譯的代碼是否也可以在Linux中進行編譯而不會發生任何變化或變化不大?
  5. Cygwin是否可以在Linux下運行由 構建的可執行文件?
  6. 爲什麼Cygwin在我使用pthread庫時不需要鏈接器 選項-lpthread?爲什麼在#include <iostream>不需要使用using namespace std;
  7. 我可以在Cygwin中使用QT嗎?如果是這樣,怎麼樣?
  8. 我可以啓動我的Linux在其他
  9. 分區與Cygwin和使用它?
  10. 我可以訪問Cygwin中EXT3的其他分區 嗎?

回答

14

對1: 是的。套接字庫隨Cygwin一起提供 - 許多基於套接字的應用程序(如web servers)都包含在基本發行版中。

對2: 是的。我認爲GNU C運行時和庫中的所有'第2節和第3節'系統調用都是由cygwin runtume實現的。您可以在Cygwin附帶的手冊頁中查看它。由Cygwin實現的系統調用和std lib調用的列表可以發現here.

On 3:是的。 Cythwin中包含Pthread。link above中提到的列表也提到了pthread。如果在Cygwin和Linux之間沒有任何變化(假設Cygwin沒有依賴關係),那麼針對GNU庫構建的任何東西都應該工作很少或根本不變。根據CPU架構可能擔心word alignmentendianness和其他特定架構的移植問題,但如果你在英特爾針對Windows和Linux,如果任何移植問題,從CPU架構所產生的代碼將有幾個。

在5: Cygwin的將默認建立對自己的共享庫的程序,但是GCC可以交叉編譯的目標其他平臺。您可以(理論上)將GCC設置爲交叉編譯爲編譯器支持的任何目標。有關於與GCC交叉編譯的plenty of resources on the web,我不認爲這個過程在Cygwin上會有很大的不同。

注意Cygwin的二進制文件將無法在Linux上運行 - 或者反之亦然。你仍然需要爲兩者單獨構建。

6:不確定 - 猜測它包含在標準運行時中,可能是因爲某些原因需要包裝Win32線程API。

On 7: 不知道 - 在所有平臺上的g ++上可能都是一樣的。 顯然是一個編譯器錯誤。 Dan Moulding's Answer涵蓋了更詳細的內容。

在8:是。 IIRC QT is available in the standard builds,它肯定會在Cygwin上編譯。與Linux/Unix一樣,Cygwin上的QT使用X11後端,因此您需要運行諸如XMing之類的X服務器。

爲了避免你可能要build QT apps against the Win32 API, X服務器的依賴。可以使用MinGW來實現,它是一組頭文件和庫,用於使用GCC構建本機Win32應用程序。 MinGW的可以從Cygwin環境(在Cygwin交叉編譯到非Cygwin的目標GCC的一個例子)內使用,並從cygwin.cominstaller提供安裝的選項。

MinGW的是相當成熟;它具有所有「常見的嫌疑人」 - 你期望在Unix/Linux GCC開發環境中找到的庫和頭文件,並且非常穩定。因爲它是(a)免費的,(b)支持軟件使用的庫和(c)使用GCC,所以它不受到辯論變化的影響,因此它通常是構建開源軟件的Win32端口的首選工具。 MSVC和GCC。但是,語言和可用庫中的這些辯證變體(例如MSVC沒有帶有getopt的實現)意味着在MinGW和MSVC之間移植程序可能非常繁瑣。我的經驗 - 雖然我只做了幾次這麼簡單,但不是非常廣泛 - 因爲在MinGW32和Linux之間移植應用程序比在MinGW和MSVC之間移植應用程序更容易。很顯然,具有不可移植依賴性(如Win32特定API用法)的應用程序需要爲新平臺重新編寫相關組件,但標準庫,頭文件和語言方言的差異問題會少得多。

QT在提供平臺抽象層方面做得相當不錯。它爲數據庫訪問,線程,I/O和許多其他服務以及GUI提供了API。儘可能使用QT API應該有助於提高可移植性,MinGW附帶的Unix/Linux風格的庫意味着它可以爲您提供一個很好的平臺,讓應用程序能夠在相對較少的平臺相關代碼的情況下在Win32和Linux之間移植。

編輯: Cygwin中的Qt開發包:

  • QT4:Qt應用程序框架(源)
  • QT4-devel的工具:Qt4的助理,設計師,和語言學家
  • QT4 -doc:Qt4的API文檔
  • QT4-qtconfig:Qt4的桌面配置應用
  • QT4-qtdemo:Qt4的演示和實例

您可能還需要gcc4-g ++和其他一些零碎的東西。 This listing on the cygwin web site有一個包的列表。

+0

在cygwin中使用QT哪個軟件包必須安裝? – SjB 2010-01-21 18:28:50

+0

qt4- * - 請參閱編輯。 – ConcernedOfTunbridgeWells 2010-01-21 22:52:04

+0

在QT中感謝很好的答案! – SjB 2010-01-22 08:59:06

2

是的,是的,是的,是的(如果你仔細寫出來,不使用特定於Cygwin的任何東西),

號在5:從Cygwin的有可能交叉編譯成Linux,我真的不知道。如果是這樣,那麼從技術上來說,一些由Cygwin構建的可執行文件將在Linux上運行。但Cygwin可執行文件不能在Linux上運行。

3

「是」對所有這些,除了5.你必須單獨建立自己的可執行文件的Linux,但應該是簡單的,因爲答案4「是」。

確保您在兩個平臺上安裝了所需的所有開發頭文件。

1

作爲對#7的迴應,您擁有的C++編譯器版本可能已過時。如果你不需要linux/posix的可移植性,我會切換到non-cygwin MinGW GCC編譯器 - 你可以得到4.4.1在http://tdragon.net/recentgcc/

+0

我在Cygwin中使用gcc 4 – SjB 2010-01-20 10:14:16

1

關於6,你不需要-lpthread,因爲Pthreads支持Cygwin DLL的一部分。

+0

感謝很好的回答 – SjB 2010-01-21 07:17:11

2

1-4:這些答案都是「是」,因爲所有這些功能你都在問的是POSIX標準的一部分。 Cygwin基本上是Windows的POSIX層,因此Cygwin自然包含了所有這些功能。不,Cygwin二進制文件不會在Linux內核下執行,因爲Cygwin生成的代碼最終是Windows本機代碼。它將鏈接到通常的Windows DLL(如kernel32.dll),而Linux甚至沒有DLL的概念(它具有相似但不同的共享對象)。更重要的是,在Cygwin下構建的可執行文件將採用PE格式,但Linux通常使用ELF格式作爲可執行文件。當然,您可以在Cygwin下進行交叉編譯,從而生成本機Linux可執行文件,但聽起來不像您想要的那樣。另外,編譯一個新版本的GCC作爲Cygwin下的交叉編譯器使用可能不是一件簡單的任務。

6:在Cygwin下GCC不需要使用的-lpthread,因爲所有的Cygwin下的並行線程代碼是在cygwin1.dll它總是默認情況下鏈接英寸

7:This is a bug in GCC(在所有平臺上)。它一直在長時間時間,並可能永遠不會被修復。

8: ConcernedOfTunbridgeWells做了很好的解釋,所以我沒有太多可以說的。但是,值得注意的是,Cygwin的軟件包列表中包含X.org X Window系統。使用Cygwin 1.7.x,設置它並使用它是一個微風,它看起來非常堅固。如果你想在X中使用Qt,我建議使用Cygwin的X服務器。

+0

對於#7的有力答案+1,但Xming是比標準Cygwin更好的通用X服務器。 IMO XMing幾乎和Starnet一樣好。 – ConcernedOfTunbridgeWells 2010-01-28 07:54:16