遇到不同版本的编译器+ libgcc

时间:2017-12-18 14:37:49

标签: mingw-w64 msys2 libgcc

我有一个依赖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之上。但我不知道我是在问一个愚蠢的问题,因为这是不可能的。

1 个答案:

答案 0 :(得分:2)

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

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

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