0

我有一个第三方库,它依赖于libgcc_s_sjlj-1.dll. 我自己的程序是在 MSYS2 (mingw-w64) 下编译的,它依赖于libgcc_s_dw2-1.dll.

请注意,第三方库是纯二进制文件(无源)。另请注意,两者libgcc_s_sjlj-1.dll都是libgcc_s_dw2-1.dll32 位的,所以我认为这不是与架构相关的问题。

结果很明显,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模块的顶部。

My goal is straightforward: I would like to find a solution so that my code will sit on top of libgcc_s_sjlj-1.dll instead of libgcc_s_dw2-1.dll. But I don't know if I am asking a stupid question simply because this is just not possible.

4

1 回答 1

1

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

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

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

于 2017-12-19T16:48:27.470 回答