boost库的多重连接

时间:2017-03-23 04:38:16

标签: c++ visual-c++ boost linker

如果应用程序链接到一些boost库和另一个使用boost链接编译的库,是否会出现像ODR这样的问题?

实施例: foo.exeboost-*.libbar.libbar.lib链接,之前在编译boost-*.lib时,它也与PNG *in_image=new PNG("in.png"); size_t width=in_image->width(); size_t height=in_image->height(); PNG *out_image=new PNG(width,height); 有关联。

根据MSVC,库构建为多线程。

2 个答案:

答案 0 :(得分:0)

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

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

我建议您尝试在没有该增强库的情况下链接到bar.lib,看看它是否有效。如果它编译,没有它你就会很好。如果您收到未定义的引用错误,则需要链接到它。这是最糟糕的情况。

答案 1 :(得分:0)

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