提升库的多个链接

Multiple linkage of boost libraries

本文关键字:链接      更新时间:2023-10-16

如果应用程序与某些 boost 库链接,而另一个使用带有 boost 的链接编译的库,是否存在像 ODR 这样的问题?

例: foo.exeboost-*.libbar.lib的链接,以前在编译bar.lib时它也与boost-*.lib链接。

库根据 MSVC 构建为多线程。

我在使用静态链接的libcURL和OpenSSL上遇到了类似的问题。libCURL 库使用 OpenSSL 进行 https 下载,编译时需要链接到 OpenSSL。我的观察是:

  • 如果您将libcURL链接到OpenSSL,那么当程序使用libCURL时,您无需将程序链接到OpenSSL
  • 如果您将libcURL链接到OpenSSL,并将您的程序链接到OpenSSL,MSVC将抱怨存在多个冲突的实现。

我建议你尝试链接到没有那个提升库的bar.lib,看看它是否有效。如果它编译,没有它你就很好。如果收到未定义的引用错误,则需要链接到该错误。这是最坏的情况。

在同一

进程中混合多个版本的 Boost(包括仅标头库(总是一个坏主意。Boost不提供API或ABI保证,如果两个不同的版本相互接触,那么预计内存损坏甚至更糟。