新构建的 Cppcheck-gui 会崩溃

Posted

技术标签:

【中文标题】新构建的 Cppcheck-gui 会崩溃【英文标题】:Freshly built Cppcheck-gui simply crashes 【发布时间】:2013-10-04 13:32:31 【问题描述】:

我在构建 Cppcheck GUI 时遇到了一些问题,包括错误的 Qt、错误的 MinGW、错误的 QtCore4.dll 路径,但最终将其转换为可执行文件,但运行时会崩溃。

问题点的反汇编如下:

 mov         eax,12Fh  
 xor         ecx,ecx  
 lea         edx,[esp+4]  
 call        dword ptr fs:[0C0h]  
 add         esp,4  
 ret         0Ch  

似乎它在尝试调用静态链接的东西时崩溃了。还有一件事对我来说似乎很奇怪:可执行文件大约为 30 Mb,而我从下载的 .msi 安装的版本中为 500 Kb。它只是构建错误。

我使用来自 Github 的最新资源,Qt 4.8.5(mingw 版本),尽管我从 Qt 5.1.1 获取了 MinGW 本身。如果重要的话,整个事情都在 Windows 中进行。我只是运行“build.bat all debug”——就是这样。那么,这次我做错了什么?

【问题讨论】:

Qt 有 2 种类型的库:release (QtCore4.dll) 和 debug (QtCored4.dll)。Debug 的末尾带有 'd' 前缀,并且本身包含调试符号,因此它们意义重大较大。因此,如果您使用 qt 的调试库来构建 gui,那么大小一点也不奇怪(尽管我想知道,为什么?)。关于静态构建 - 如果您想从 qt 制作静态可执行文件,您必须使用静态配置和构建 qt 本身链接。情况似乎 cppcheck 想要构建静态 exe,而您的 qt 是使用动态链接构建的。不过,我可能错了。请详细了解您构建的 qt 或 cppcheck 【参考方案1】:

官方的 Qt 4.8.5 是使用 GCC 4.4 构建的。 downloads page 将其列为“Qt 库 4.8.5 for Windows (minGW 4.4, 317 MB)”。但是,Qt 5.1.1 提供的 MinGW 包含 GCC 4.8,它与使用 GCC 4.4 构建的库不兼容。 GCC 版本不匹配的症状是奇怪的崩溃,就像您所看到的那样。

您的选择(从最简单到最难)是:

使用 MinGW 4.4 构建您的程序(有人在 http://nosymbolfound.blogspot.com.au/2012/12/since-until-now-qt-under-windows-is.html 托管一个副本),或者 使用您的 MinGW 版本自己从源代码构建 Qt 4.8,或者 将程序移植到 Qt 5

【讨论】:

以上是关于新构建的 Cppcheck-gui 会崩溃的主要内容,如果未能解决你的问题,请参考以下文章

升级到 TensorRT 7 后加载或构建 cuda 引擎偶尔会崩溃

构建以用新应用程序版本替换旧版本应用程序导致应用程序崩溃!原因?

-cppC++中的代码重用

CPPC可能是东半球最详细的黑苹果安装教程

无法上传新的构建文件 XCode 6.3.2

使用 LLVM 构建和任何优化都会导致应用程序在启动时崩溃