我在Windows上使用的是Code::Blocks和GCC/MinGW,并且我正在尝试构建一个大约有20k行和40个源模块的wxWidgets应用程序。而且它的构建速度非常非常慢。
编译一个C++模块需要2-5秒,链接甚至需要2-3分钟。
这是一段可移植的代码,并且在Linux上编译速度非常快。我不能跟随构建消息窗口...整个过程持续不到20秒。
我尝试了常见的调整(例如,预编译头、关闭优化等),但都不起作用。
为什么它这么慢?
发布于 2009-12-09 00:43:24
您是否在Active Directory域中,但没有立即连接到该域?
虽然我不知道为什么MinGW会很慢,但我的经验是,属于AD域的计算机,但无法到达AD控制器,在启动可执行文件(如rxvt.exe)时出现延迟,并且当前正在运行的计算机遇到暂停或卡顿(如使用MinGW构建的emacs )。
我仍在调查以确定此行为的实际原因,但我想我会提到它,以防它适用于您。
发布于 2017-05-07 18:08:17
从MSYS 1.0.19-1
开始,如果用户帐户在Active Directory域中,并且域控制器(DC)无法访问,则在启动任何MSYS可执行文件(使用MSYS DLL
)之前,MSYS DLL
将引入较长的延迟。这会影响MSYS make
和CoreUtils包中的所有命令行实用程序,如ls
、rm
等,这些工具通常安装在C:\MinGW\msys\1.0\bin
中。
观察结果:
bash
外壳启动实用程序时,只有外壳的启动会受到延迟的影响。从外壳启动的实用程序不会受到影响。从外壳启动的工具延迟可能会有所不同,在我的情况下,它是在延迟的命令启动后10-20秒内21sec.cmd
并键入echo %LOGONSERVER%
,然后键入ping
或包含DC主机名的net view
。为什么它会这么慢:
uinfo.cc internal_getlogin()
中的MSYS DLL
代码进行了两次系统调用来获取用户信息。它第一次调用NetUserGetInfo()
从本地计算机检索用户帐户。对于域用户,它会失败,因此它使用从LOGONSERVER
变量获取的DC服务器第二次调用它。如果无法立即访问此主机,它将引入很长的延迟,直到呼叫因超时而失败。应用程序将在稍后启动。如何避免此问题,有几种解决方法:
LOGONSERVER
。cmd
或脚本调用MSYS工具,请将LOGONSERVER
设置为本地主机以避免网络访问。例如,set LOGONSERVER=\\LOCALHOST
为我工作。注意:这个变量是在登录时设置的,与在cmd
或脚本中设置相比,在Windows环境变量窗口中全局更改它没有任何效果。发布于 2015-04-21 16:18:31
因为MinGW没有fork()
,所以Windows上的许多“单一”的东西都慢得令人痛苦。Windows只有CreateProcess()
,这是非常不同的。Unix shell和GNU Make做了大量的分支,所以在MinGW下运行这些分支会导致“模拟”的分支,这真的很慢。
另一个受此影响的是GNU Autotools,因此在从源代码构建"unixy“应用程序时运行./configure
脚本也非常慢。如果您需要多次这样做(例如,在获取配置以查找所有库时遇到问题),这可能会变得非常恼人。
This answer更详细地解释了Cygwin和MinGW 如何使用模拟fork()
,this answer有更多最新的解释。
https://stackoverflow.com/questions/929495
复制相似问题