17

我已经设法(以某种方式)使用 Mingw-w64 项目的 32 位 Windows 编译器交叉编译 Qt5。所有库都已安装到~/i686-w64-mingw32.

我有一个基于 CMake 的 Qt 项目,我正在尝试交叉编译。按照这些说明,我已经能够编译项目。到现在为止还挺好。

不幸的是,在 Windows 上执行生成的二进制文件时,我最终得到一个错误:

“无法在动态链接库 [application_name].exe 中找到过程入口点 __gxx_personality_sj0”

* [application_name] 是主可执行文件的完整路径

我听说这种类型的问题有时可能是由混合使用不同版本的 MinGW 编译的库引起的。但是这台机器上的所有东西(所有的库和可执行文件)都由同一个编译器(i686-w64-mingw32工具链)编译。

此外,我发现奇怪的是,错误抱怨应用程序可执行文件中缺少入口点,而不是.dll文件之一。

什么可能导致此错误以及可以采取哪些措施来纠正它?

4

2 回答 2

19

查找错误库的位置:

  • 打开命令提示符。
  • 输入“libstdc++-6.dll”并点击“Enter”
  • 应该会出现一个带有路径和消息的消息框:c:/somefolder/someapp/.../libstdc++-6.dll 这个文件没有与之关联的程序...等等等等 。路径就是答案.
  • 从 IDE 中运行您的应用程序:IDE 中的 %PATH% 可能与命令提示符中的 %PATH% 不同(请参阅 IDE 设置)。在这种情况下,将“libstdc++-6.dll”放入批处理文件并从 IDE 中运行批处理应该会显示您的程序正在拾取的库的哪个特定实例。

我的个人解决方案:

  • 打开“系统属性”->“环境变量”(在 Windows 7 中,在我的情况下)并确保两个 %PATH% 变量(用于您的帐户和系统范围变量 %PATH% 的变量)都以 c:\mingw 开头\bin (或您为该库提供的任何路径)。此外,您可能必须重新启动 IDE 才能选择新的 PATH。

根据我的经验,MS Windows 在 %PATH% 中选择位置的方式可能非常不稳定。上次,我添加了一个具有单个函数的源文件,并将该函数包含在我的代码中。即使我删除了所有函数的代码并且只留下了“return”语句,该程序总是会选择错误的 libstdc++-6.dll。每次该函数被注释掉(排除)时,程序都会再次正常运行。我怀疑有时 Windows 会出于某种原因从“系统变量”中选择 PATH 并避免使用“用户变量”PATH(您的 Windows 帐户的 PATH)。

于 2014-01-12T22:44:57.793 回答
11

libstdc++-6.dll最后发现问题出在某处的任性导致的$PATH。在确保由 Mingw-w64 构建的副本在应用程序的目录中之后,一切正常。

于 2013-02-15T08:18:50.483 回答