比方說,我有我的cygwin下編譯的應用程序,我想分發應用程序,而無需用戶安裝cygwin。打包可執行文件和cygwin DLL足夠了嗎?運行的應用程序,在Cygwin中編譯,而無需安裝了cygwin
回答
通常,是的。雖然(Windows \ System32)確保將Cygwin DLL安裝在公共位置,但是當它的多個版本加載到同一臺機器上時,此DLL的行爲非常糟糕。
[GPL鏈接和衍生作品(http://en.wikipedia.org/wiki/GNU_General_Public_License#Linking_and_derived_works) – 2009-12-30 16:36:03
問題未說明關於作者不釋放任何代碼。許多實用程序會捆綁cygwin1.dll。一個這樣的例子是cntml:http://cntlm.sourceforge.net/。 – brianegge 2010-01-06 02:57:41
你可以嘗試編譯所有靜態。這應該允許你運行一切,而不需要libs(因爲它們已經在你的二進制文件中)。 但是,這也意味着它可能無法正常工作的所有平臺上的cygwin是否需要不同的或較新的DLL。
這將無法正常工作:http://stackoverflow.com/questions/340696/can-you-statically-compile-a-cygwin-application – Hut8 2013-07-24 15:20:36
您的應用程序是否真的需要任何Cygwin提供的Posix仿真程序?如果沒有,你可以使用-mno-cygwin標誌編譯它,它不會依賴於cygwin,而是一個本地Windows應用程序。通常,您只需要一個真正的shell(bash)來配置和構建應用程序,但實際上並不需要Cygwin的Posix功能。
另一種替代方案是MSYS + MinGW,它是Cygwin的輕量級叉子。這提供了一個默認生成本地Windows應用程序的編譯環境。
第三個選擇是從自身的Cygwin使用MinGW的編譯器。它們應該可以通過普通的Cygwin軟件包管理器來使用。然後,您將使用MinGW編譯器配置項目進行交叉編譯。
MSYS不是cygwin的分支。 – 2009-12-30 18:08:42
http://www.mingw.org/history http://en.wikipedia.org/wiki/MinGW#Comparison_with_Cygwin 另外,MinGW郵件列表上的主要人員經常說MinGW/MSYS是一個叉cygwin的。 – 2009-12-30 18:24:23
MinGW不是MSYS – 2009-12-30 18:28:51
事情已經改變了。在Cygwin庫目前正在較寬鬆GPL(V3),這使得它能夠以落在下範圍廣泛的許可證,從FOSS到專有應用捆紮在一起。
什麼阻礙的方式是,在Cygwin中的POSIX模擬從本地Windows應用程序的角度看需要的東西有點過分。
這是我Cygnal項目進來Cygnal公司代表Cygwin的原生應用程序庫:這是一個簡易的Cygwin兼容叉而改變,或在某些情況下,只需重新可以配置,某些功能的行爲,以以符合Windows平臺的本地慣例。
一個基本的「Hello,World」Cygwin程序需要兩個庫。一個GCC運行時稱爲cyggcc_s-1.dll
和Cygwin的DLL cygwin1.dll
。 Cygnal項目爲後者提供了替代品。 (32位版本可供下載)。世界Cygwin的POSIX視圖和Windows之間的不兼容的
一個明顯的區域是路徑處理。文件系統的Cygwin的視圖是通過假/
根目錄,它提供等/cygdrive
,/proc
和/dev
空格其自身的內部「裝載表」。 Cygnal放棄了這一切。路徑是Win32路徑。當前工作目錄的行爲與Windows當前工作目錄類似。驅動器與當前目錄相關聯,驅動器相對路徑如D:foo.txt
在Cygnal下工作。在Cygnal下,/dev
和/proc
仍可用:它們作爲特殊前綴dev:/
和proc:/
進行訪問。這是不允許chdir
這些:這不會是本地的!在Cygnal下,如果chdir
到D:\wherever
那麼您當前的驅動器是D
驅動器,而路徑/foo
或\foo
指的是D:\foo
。Cygwin的主要POSIX根目錄不見了。
然而,使用Cygnal,您可以繼續使用POSIX功能,從而可以開發跨平臺程序,這些程序只需較少的代碼即可基於平臺進行切換,而使用MinGW或Microsoft Visual C/C++。
例如:你可以寫使用VT100代碼和termios
一個Win32控制檯應用程序。相同的代碼將在Unix上運行。無需在Windows上使用Win32控制檯API,在POSIX系統上使用VT100/termios
。
又如:穿線,你可以只使用POSIX線程。 pthread_create
啓動線程,pthread_mutex_lock
來鎖定互斥鎖等。對於轉換爲Win32或POSIX的線程,您的程序不需要可移植性抽象;你只需要使用POSIX就是這樣。
Cygnal中的uname
函數報告sysname
帶有CYGNAL
前綴而不是CYGWIN
。通過這種方式,您的程序可以知道它在Cygnal上運行,而不是在Cygwin(或任何其他POSIX平臺)上運行。因此,您可以進行必要的調整:例如,如果您的程序需要/dev/null
,則可以使用Cygnal代替dev:/null
。
- 1. 從Java運行cygwin編譯的程序
- 2. MSI安裝程序爲Cygwin的應用
- 3. Cygwin無法編譯我的程序
- 4. 在我的Windows安裝中安裝Cygwin編譯的Python模塊
- 5. Cygwin無法安裝
- 6. Clojure編譯並使用cygwin運行
- 7. 在Linux上運行cygwin編譯的C++程序
- 8. 在Cygwin上編譯Java程序
- 9. Cygwin的程序編譯但不運行的
- 10. 用cygwin編譯winapi
- 11. 用Cygwin編譯TCC
- 12. 用Cygwin編譯C++
- 13. 用Cygwin安裝PyGST
- 14. 安裝obspy Cygwin中
- 15. G ++編譯Cygwin
- 16. 安裝libyaml Cygwin
- 17. cygwin安裝
- 18. 如何從Windows c#(visual studio)運行cygwin編譯的程序?
- 19. 使用Cygwin編譯器在Netbeans IDE中安裝FreeGlut 3.0.0
- 20. 在cygwin中編譯OpenEXR
- 21. 在Windows上運行cygwin中的C++程序的安裝後過程是什麼?
- 22. cygwin新手編譯並運行c程序文件
- 23. 編譯Visual Studio程序,無需安裝即可運行
- 24. 我有Cygwin(1.7.17)和Git安裝,如何在cygwin中運行git(TortoiseGit 1.8.12.0)
- 25. 如何編譯需要在Cygwin上
- 26. 需要交叉編譯窗口中的JNI庫使用cygwin在linux中運行
- 27. Hadoop程序無需hadoop安裝編譯
- 28. Python線程無法在cygwin上運行
- 29. 如何發佈/編譯程序,而無需用戶安裝它
- 30. GCC庫Cygwin安裝
Cygwin的DLL是GPL的,所以你也必須分發您的應用程序的來源。 – 2009-12-30 16:29:37
但您可以購買Cygwin的商業許可證。 – 2009-12-30 18:27:08
請詳細說明 - 因爲答案中似乎有兩種解釋。你的意思是技術上(我需要分發哪些*其他*文件),或者合法(許可證允許我做什麼)? – Wim 2010-01-06 12:20:38