我设法(不知)交叉编译MinGW的-W64项目的编译器对32位Windows QT5。 所有的图书馆已经安装到~/i686-w64-mingw32
。
我有我试图交叉编译基于CMake的QT间期项目。 通过遵循这些说明 ,我已经能够拿到项目进行编译。 到现在为止还挺好。
不幸的是,执行在Windows上生成的二进制文件的时候,我最终得到一个错误:
“程序输入点__gxx_personality_sj0不能设在动态链接库[应用程序名称] .exe文件”
* [APPLICATION_NAME]是将主可执行文件的完整路径
我听说过这类问题有时可以通过混合不同版本的MinGW的编译库造成的。 但是这台机器(所有库和可执行的)上的一切都得到了相同的编译器(编译i686-w64-mingw32
工具链)。
另外,我觉得很奇怪的是,错误抱怨的切入点是从应用程序可执行文件,而不是一个丢失.dll
文件。
这是什么原因这个错误,可以做些什么来弥补呢?
发现错误的库中的位置:
- 打开命令提示符。
- 类型“的libstdc ++ - 6.dll”并按“回车”
- 一个消息框应出现的路径和消息: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的方式可以是非常不稳定的。 上次,我加入一个单一功能的一个源文件,其中包括该功能为我的代码。 该方案将永远挑错的libstdc ++ - 6.dll甚至当我删除了所有函数的代码只留下了“return”语句。 每一个函数被注释掉时间(不含),该计划将再次正常运行。 我怀疑,有时Windows选择的路径从“系统变量”和避免“用户变量” PATH(Windows帐户的PATH)的某些原因。
最终,事实证明,这个问题是由任性所造成libstdc++-6.dll
介于$PATH
。 确保通过的MinGW-W64内置的复制品是在应用程序的目录后,一切正常。