c++ - 太多 libboost_*.lib

标签 c++ boost

我已经从 http://boost.teeks99.com/ 下载了 boost 1.58.0(预编译,x86,VC 12.0)并安装到C:\local\boost_1_58_0(我也试过自己用msvc-12.0编译源码,结果一样。

问题:例如,我看到同一个库的 libboost*.lib 太多

ls -l libboost_math_* 返回:

libboost_math_c99f-vc120-mt-1_58.lib
libboost_math_c99f-vc120-mt-gd-1_58.lib
libboost_math_c99f-vc120-mt-s-1_58.lib
libboost_math_c99f-vc120-mt-sgd-1_58.lib
libboost_math_c99f-vc120-s-1_58.lib
libboost_math_c99f-vc120-sgd-1_58.lib
libboost_math_c99l-vc120-mt-1_58.lib
libboost_math_c99l-vc120-mt-gd-1_58.lib
libboost_math_c99l-vc120-mt-s-1_58.lib
libboost_math_c99l-vc120-mt-sgd-1_58.lib
libboost_math_c99l-vc120-s-1_58.lib
libboost_math_c99l-vc120-sgd-1_58.lib
libboost_math_c99-vc120-mt-1_58.lib
libboost_math_c99-vc120-mt-gd-1_58.lib
libboost_math_c99-vc120-mt-s-1_58.lib
libboost_math_c99-vc120-mt-sgd-1_58.lib
libboost_math_c99-vc120-s-1_58.lib
libboost_math_c99-vc120-sgd-1_58.lib
libboost_math_tr1f-vc120-mt-1_58.lib
libboost_math_tr1f-vc120-mt-gd-1_58.lib
libboost_math_tr1f-vc120-mt-s-1_58.lib
libboost_math_tr1f-vc120-mt-sgd-1_58.lib
libboost_math_tr1f-vc120-s-1_58.lib
libboost_math_tr1f-vc120-sgd-1_58.lib
libboost_math_tr1l-vc120-mt-1_58.lib
libboost_math_tr1l-vc120-mt-gd-1_58.lib
libboost_math_tr1l-vc120-mt-s-1_58.lib
libboost_math_tr1l-vc120-mt-sgd-1_58.lib
libboost_math_tr1l-vc120-s-1_58.lib
libboost_math_tr1l-vc120-sgd-1_58.lib
libboost_math_tr1-vc120-mt-1_58.lib
libboost_math_tr1-vc120-mt-gd-1_58.lib
libboost_math_tr1-vc120-mt-s-1_58.lib
libboost_math_tr1-vc120-mt-sgd-1_58.lib
libboost_math_tr1-vc120-s-1_58.lib
libboost_math_tr1-vc120-sgd-1_58.lib

我的问题:

  1. 为什么一个库有那么多lib文件? (36 个文件 libboost_math、4 libboost_atomic、6 libboost_iostreams 等等)
  2. 为什么没有单独的 libboost_math.lib、libboost_atomic... 文件?
  3. 如果我想使用 boost_math,我应该选择哪个库?

最佳答案

Boost.Math 包含很多部分,它们不共享同一个库文件。

库的文件名描述了它构建的目的。

例如,

  • vc120:它是为 Microsoft Visual C++ 12.0(又名 2013)构建的
  • mt:将与 C 运行时的多线程版本链接。 (libcmt.lib)
  • mt-s:将链接到共享 C 运行时的多线程版本。 (msvcrt.lib)
  • mt-gd:将链接到 C 运行时的多线程调试版本。 (libcmtd.lib)
  • mt-sgd:将链接到共享 C 运行时的多线程调试版本。 (msvcrtd.lib)
  • s:将链接到共享 C 运行时的单线程版本。 (现在VC好像没有?我不确定。)
  • sgd:将链接到共享 C 运行时的单线程调试版本。 (现在VC好像没有?我不确定。)

如果您将 Boost 与 Microsoft Visual C++ 一起使用,您将受益于自动链接功能。设置额外的库目录和链接器(准确地说,boost header 指示链接器)将为您链接正确的版本。

关于c++ - 太多 libboost_*.lib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31124947/

相关文章:

C++ getline(), 第二次运行这个函数不起作用

c++ - 错误 : incomplete type 'typename' named in nested name specifier

c++ - boost asio - session 线程不会结束

c++ - 使用 C++ boost 库从图中删除顶点及其所有邻居

C++ 标准列表和默认可构造类型

c++ - 为什么按引用传递会导致崩溃(C++)?

c++ - future 是检查单个线程完成的安全方法吗?

c++ - Boost 容器无法使用未定义(但已声明)的类进行编译

c++ - 未使用的函数能否根据 C++14 实例化具有副作用的变量模板?

c++ - 为什么 libc++ 的 std::string 实现占用 3 倍于 libstdc++ 的内存?