遇到窗口上的不同版本的编译器 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。但是我不知道我是否只是因为不可能就问一个愚蠢的问题。

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

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

您可以将MSYS2用作bash壳,但您可能无法链接到程序中的任何库;您需要自己重新编译所有库(此封闭的第三方一方)。

最新更新