我有一个依赖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
之上。但我不知道我是在问一个愚蠢的问题,因为这是不可能的。
答案 0 :(得分:2)
术语dw2和sjlj指的是GCC可以在Windows上使用的两种不同类型的异常处理。我不知道细节,但我不会尝试使用不同类型链接二进制文件。由于MSYS2不提供sjlj工具链,因此您必须在其他地方找到一个。我建议从" MingW-W64-builds"下载一个。项目,您可以在此页面上找到:
https://mingw-w64.org/doku.php/download
您可以将MSYS2用作Bash shell,但您可能无法链接到程序中的任何库;你需要自己重新编译所有的库(除了这个闭源的第三方库)。