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

问题描述 投票:0回答:1

我有一个第三方库,依赖于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个回答
2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.