【问题标题】:Different versions of compilers + libgcc on windows encounteredwindows上遇到不同版本的编译器+libgcc
【发布时间】:2018-05-31 22:17:34
【问题描述】:

我有一个依赖于libgcc_s_sjlj-1.dll 的第三方库。 我自己的程序是在MSYS2(mingw-w64)下编译的,它依赖于libgcc_s_dw2-1.dll

请注意,第三方库是纯二进制文件(无源)。另请注意,libgcc_s_sjlj-1.dlllibgcc_s_dw2-1.dll 都是 32 位的,所以我认为这与架构无关。

结果很明显,基于libgcc_s_dw2-1.dll 编译的程序无法与基于libgcc_s_sjlj-1.dll 的第三方库一起使用。我得到的是一个缺少的入口点__gxx_personality_sj0

我绝对可以尝试调整我的工具链以与第三方的libgcc_s_sjlj-1.dll 保持一致,但我不知道我需要付出多少努力才能做到这一点。在使用这个 setjmp/longjmp 版本的 MSYS2 下,我没有找到这样的 libgcc dll 变体。我什至担心我需要消除整个工具链,因为我在 MSYS2 下拥有的所有二进制文件都位于这个 libgcc_s_dw2-1.dll 模块的顶部。

我的目标很简单:我想找到一个解决方案,以便我的代码位于libgcc_s_sjlj-1.dll 之上,而不是libgcc_s_dw2-1.dll。但我不知道我是否只是因为这是不可能的而问一个愚蠢的问题。

【问题讨论】:

    标签: mingw-w64 msys2 libgcc


    【解决方案1】:

    术语 dw2 和 sjlj 指的是 GCC 可以在 Windows 上使用的两种不同类型的异常处理。我不知道细节,但我不会尝试使用不同类型链接二进制文件。由于 MSYS2 不提供 sjlj 工具链,因此您必须在其他地方找到一个。我建议从“MingW-W64-builds”项目中下载一个,您可以在此页面上找到该项目:

    https://mingw-w64.org/doku.php/download

    您可以将 MSYS2 用作 Bash shell,但您可能无法在程序中链接到它的任何库;您需要自己重新编译所有库(除了这个封闭源代码的第三方库)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-07
      • 2018-05-27
      • 2021-08-06
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多