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

我有一个依赖于libgcc_s_sjlj-1.dll的第三方库。 我自己的程序是在MSYS2(mingw-w64)下编译的,它取决于libgcc_s_dw2-1.dll。在Windows上遇到不同版本的编译器+ libgcc

请注意,第三方库是纯二进制文件(无源代码)。另请注意,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-建立”项目,您可以在此页面上可以找到几种:

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

您可以使用MSYS2为Bash shell中,但你可能不会链接到任何的图书馆在您的计划中;你需要自己重新编译所有库(除了这个封闭的源代码第三方库)。

以上是 在Windows上遇到不同版本的编译器+ libgcc 的全部内容, 来源链接: utcz.com/qa/264309.html

回到顶部