我设法(以某种方式)将Qt5与Mingw-w64 Project的32位Windows编译器交叉编译。所有库都已安装到~/i686-w64-mingw32
。
我有一个基于CMake的Qt项目,我正在尝试交叉编译。通过遵循这些说明,我已经能够编译该项目。到目前为止还不错。
不幸的是,当在Windows上执行生成的二进制文件时,我最终得到了一个错误:
"在动态链接库[application_name].exe中找不到过程入口点__gxx_personality_sj0"
*[application_name]是主可执行文件的完整路径
我听说这种类型的问题有时可能是由混合使用不同版本的MinGW编译的库引起的。但这台机器上的所有东西(所有库和可执行文件)都是由同一个编译器(i686-w64-mingw32
工具链)编译的。
此外,我发现奇怪的是,该错误抱怨应用程序可执行文件而不是某个.dll
文件中缺少入口点。
是什么原因导致了这个错误,可以采取什么措施来纠正它?
查找错误库的位置:
- 打开命令提示符
- 键入"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)
最终,问题是由$PATH
中某个任性的libstdc++-6.dll
引起的。在确保Mingw-w64构建的副本在应用程序的目录中之后,一切都正常了。