减少我的boost lib文件夹

时间:2013-06-06 13:47:24

标签: c++ dynamic boost dll static

即使已经在网上挖掘了大量信息,我仍然在理解boost lib文件时遇到一些麻烦。我安装了Boost 1.51,lib文件夹是1.7GB,这太多了。我需要减少它。

只是为了展示一个例子: http://i.imgur.com/6nXfVEr.png

这就是所有的正则表达式lib文件夹。有10个!我想删除大部分内容,但我很难理解,我需要哪些文件夹。

我认为'libboost'是静态库(不需要DLL)而其他的是动态的。这是否意味着如果我在项目中使用动态库我需要增强DLL?

我也可以看到一些是调试而另一些则不是。是否有必要保留两者?或者我可以只为我的项目使用非调试版本吗?

最后,我是正确的思考,让Visual Studio选择特定的libs我去: C/C++ project settings -> Code Generation -> Runtime Library,并在/ MT,/ MD等之间切换? 如果我使用多线程(/ MT),这是否意味着我可以删除所有调试库和dll,因为此选项仅使用静态库?

感谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

  

我认为'libboost'是静态库(不需要DLL),其他的是动态的。

  

这是否意味着如果我在项目中使用动态库我需要增强DLL?

  

最后,我是正确的思考,为了使Visual Studio选择特定的库我转到:C / C ++项目设置 - >代码生成 - >运行时库,并在/ MT,/ MD等之间切换?

不太好。设置/ MT或任何其他类似选项只会使您的应用程序使用相应版本的运行时库(例如CRT)。这并不意味着您只能在此之后静态链接,也不会为您自己的项目特定依赖项“选择”任何内容。

是否链接到boost作为静态库或DLL取决于您指定的.lib文件(libboostXXX或boostXXX):链接器 - >输入 - >附加依赖。此外,您可能需要访问链接器 - >一般 - >其他库目录并添加一个指向boost / libs文件夹(可能还有其子文件夹)的路径,这样就不必为要添加到依赖项的每个库指定完整路径。

但是,您应该始终(特别是在使用静态库时)链接到使用您在主项目中选择的相同运行时构建的库。如果您尝试混合不同的运行时,您很可能会得到关于双定义符号(在系统库中)等的相当神秘的链接器错误。在最坏的情况下(通常是由于一些不那么明显的设置不匹配,比如改变STL选项的预处理器定义),它不会导致链接器故障,而是导致神秘的运行时崩溃。但是,Visual Studio 2010及更高版本在检测此类不匹配方面做得相当不错(与之前的VS版本相比)。

另一个问题可能是某些提升标题使用 #pragma comment 来强制按特定名称链接必要的库。如果您发现这是一个问题,并且想要手动指定您的依赖项(或者如果它选择了您不需要链接的东西),则可以将 BOOST_ALL_NO_LIB 添加到 C的全局预处理器/ C ++ - >预处理器 - >预处理器定义

另外,您真的需要所有项目中的boost库吗?它们中有很多,而且大多数是非常特殊的东西。根据我的经验,人们通常只需要一小部分助推器来实现他们的项目特定目标。要创建此类子集(仅包含您真正使用的库的标头及其依赖项),可以使用BCP utility。这可能会大大减少你的boost / boost文件夹。当然,您也可以删除不使用的库的二进制文件。另请注意,boost中的大多数通用库都是仅限标头的,因此根本不需要链接到任何库。