我在Windows上使用Code :: Blocks IDE和GCC/MinGW,我試圖構建一個wxWidgets應用程序,它有ca. 20k線和40個源模塊。它的構建非常緩慢。爲什麼MinGW很慢?
編譯一個C++模塊持續2-5秒,甚至連續持續2-3分鐘。
這是一個可移植的代碼,並且此代碼在Linux上編譯速度非常快。我無法關注構建消息窗口......整個過程持續不到20秒。
我嘗試了常見的調整(例如,預編譯頭文件,關閉優化等),但沒有任何工作。
爲什麼這麼慢?
我在Windows上使用Code :: Blocks IDE和GCC/MinGW,我試圖構建一個wxWidgets應用程序,它有ca. 20k線和40個源模塊。它的構建非常緩慢。爲什麼MinGW很慢?
編譯一個C++模塊持續2-5秒,甚至連續持續2-3分鐘。
這是一個可移植的代碼,並且此代碼在Linux上編譯速度非常快。我無法關注構建消息窗口......整個過程持續不到20秒。
我嘗試了常見的調整(例如,預編譯頭文件,關閉優化等),但沒有任何工作。
爲什麼這麼慢?
您是否在Active Directory域中,但沒有立即連接到它?
儘管我沒有「爲什麼MinGW會很慢」的答案,但我的經驗是,屬於AD域但無法到達AD控制器的計算機在啓動時會有延遲可執行文件(如rxvt.exe)和當前正在運行的程序會遇到暫停或斷斷續續的問題(例如使用MinGW構建的emacs)。
我仍在調查以確定此行爲的實際原因,但認爲我會提及它以防它適用於您。
+1我也遇到過這種情況,禁用我的網絡適配器會立即啓動。在主機文件中爲域控制器添加虛假的DNS條目(127.0.0.1)會使事情更快速,但並不像完全禁用網絡那麼快。 – 2011-08-17 18:18:50
您可以嘗試使用更新版本的工具集。我發現它很有用: http://nuwen.net/mingw.html 它具有MinGW和通用API在單個大型軟件包中使用的所有工具。 從網站:
我MinGW的分佈( 「發行」)是x64的本地和當前包含 GCC 6.1.0和Boost 1.61.0。
MinGW是GCC到Windows的一個端口。它是免費的,並簡單到 的使用(好吧,就像工具鏈一樣簡單)。它產生獨立的 Windows可執行文件,可以以任何方式分發。
MinGW上的許多「unixy」事情都非常緩慢,因爲Windows沒有fork()
。 Windows只有CreateProcess()
,這是完全不同的。 Unix shell和GNU Make做了很多分支,所以在MinGW下運行它們會產生「仿真」的分支,這些分支非常慢。
另一件受此影響的事情是GNU Autotools,所以從源代碼構建「unixy」應用程序時運行./configure
腳本的速度也很慢。如果您需要多次執行此操作(例如,在遇到配置以查找所有庫時遇到麻煩),這可能會非常煩人。
This answer詳細介紹了Cygwin和MinGW的如何使用模擬fork()
,並this answer有更多的最新解釋。
作爲MSYS 1.0.19-1
,如果用戶帳戶是在Active Directory域和域控制器(DC)不可達,則MSYS DLL
將啓動任何可執行MSYS之前引入長延遲(使用MSYS DLL
)。這會影響MSYS make
和CoreUtils軟件包中的所有命令行實用程序,例如ls
,rm
等,這些軟件通常安裝在C:\MinGW\msys\1.0\bin
中。
觀察:
當啓動從MSYS bash
shell實用程序,只有殼的啓動被延遲的打擊。從shell啓動的實用程序不會產生影響。
延遲可能會有所不同,在我的情況下是21秒。
cmd
並輸入echo %LOGONSERVER%
,然後輸入ping
或net view
與DC的主機名。爲什麼這麼慢:
MSYS DLL
uinfo.cc internal_getlogin()
中的代碼,使兩個系統調用來獲取用戶信息。第一次它呼叫NetUserGetInfo()
從本地機器檢索用戶帳戶。對於域用戶而言,它失敗了,所以它在第二次調用DC服務器時取自LOGONSERVER
變量。如果這臺主機不能立即訪問,它會引入一個長時間的延遲,直到超時時調用失敗。該應用程序將在不久後開始。如何避免這個問題,幾個解決方法:
LOGONSERVER
。cmd
或腳本調用MSYS工具,則將LOGONSERVER
設置爲本地主機以避免網絡訪問。例如。 set LOGONSERVER=\\LOCALHOST
爲我工作。注意:該變量在登錄時設置,並且在Windows環境變量窗口中全局更改該變量與將其設置爲cmd
或腳本相比無效。
你正在使用哪個gcc版本?在命令行執行gcc --version來查找 – 2009-05-30 11:13:18
gcc版本是v3.4.5 – Calmarius 2009-06-01 10:55:11