繁体   English   中英

程序入口点__gxx_personality_sj0无法找到...

[英]The procedure entry point __gxx_personality_sj0 could not be located in…

我已经设法(以某种方式)使用Mingw-w64 Project的32位Windows编译器交叉编译Qt5。 所有库都已安装到~/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%中选择位置的方式可能非常不稳定。 上次,我添加了一个带有单个函数的源文件,并将该函数包含在我的代码中。 程序总是选错了libstdc ++ - 6.dll,即使我删除了所有函数的代码并只留下了'return'语句。 每次该功能被注释掉(排除)时,程序将再次正常运行。 我怀疑有时Windows会从“系统变量”中选择PATH并出于某种原因避免使用“用户变量”PATH(您的Windows帐户的PATH)。

最后,事实证明问题是由一个任性的libstdc++-6.dll引起的$PATH 在确保Mingw-w64构建的副本位于应用程序目录中之后,一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM