我有一个第三方库,依赖于libgcc_s_sjlj-1.dll
。我自己的程序是在MSYS2(mingw-w64)下编译的,它依赖于libgcc_s_dw2-1.dll
。
请注意,第三方库是纯二进制文件(无源)。还请注意,libgcc_s_sjlj-1.dll
和libgcc_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 shell,但您可能无法链接到程序中的任何库;您需要自己重新编译所有库(除了这个闭源第三方库)。