使用较新的 MinGW 构建应用程序(需要使用较旧的 MinGW 构建的库)?

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

我使用 MinGW v8 构建了一个 C++ 库。该库动态链接到 MinGW 中包含的标准 C++ 库

libgcc_s_seh-1.dll
libstdc++-6.dll
libwinpthread-1.dll

现在我正在尝试使用较新版本的 MinGW v11 构建另一个 C++ 应用程序。该应用程序动态链接到我之前构建的库。该应用程序还动态链接到标准 C++ 库

libgcc_s_seh-1.dll
libstdc++-6.dll
libwinpthread-1.dll

现在的问题是该库需要 v8 中的相同文件,而应用程序需要 v11 中的这些文件。根据我包含的版本,我在运行时收到不同的错误。

我想知道,人们通常如何处理这一问题?库和应用程序是否需要使用相同的编译器版本来构建以避免冲突,或者我的理解中是否缺少某些内容?谢谢。

使用v8文件时出错

使用v11文件时出错

c++ cmake makefile g++ mingw-w64
1个回答
0
投票

与 C 不同,C++ 通常不会为您的函数提供稳定的 ABI。因此,如果您尝试链接使用不同工具链构建的两个 C++ 库(甚至是同品牌工具链的不同版本),则很有可能会出现链接器错误。

最快的解决方案是重新编译旧的库(如果您仍然有源代码)。如果您想要 ABI 稳定性,您可以在 C++ 代码周围维护一组

extern "C"
包装器,这样您就无需担心链接问题。

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