boost C++ 库由多个组件组成。有些组件确实包含共享库,有些则不包含。
在 Fedora 14 系统下,我研究了一下,yum search boost
确实rpm -qR
像其他发行版一样,boost 库被分成几个包。
例如, boost-program-options 只包含 boost program-options 组件的共享库。
看来该包boost
依赖于所有共享库子包。其中boost-devel
似乎提供了所有标头并依赖于所有共享库子包(通过 boost)。
我是否正确,不可能在没有所有 boost 共享库包的情况下通过 yum (使用默认存储库)安装 boost 标头?
答案1
查看boost-devel包,需要同版本的boost包。以下是 boost-devel 包所需的内容:
$ rpm -qRp boost-devel-1.44.0-7.fc14.x86_64.rpm
boost = 1.44.0-7.fc14
cmake
libboost_date_time-mt.so.1.44.0()(64bit)
libboost_date_time.so.1.44.0()(64bit)
libboost_filesystem-mt.so.1.44.0()(64bit)
libboost_filesystem.so.1.44.0()(64bit)
libboost_graph-mt.so.1.44.0()(64bit)
libboost_graph.so.1.44.0()(64bit)
libboost_iostreams-mt.so.1.44.0()(64bit)
libboost_iostreams.so.1.44.0()(64bit)
libboost_prg_exec_monitor-mt.so.1.44.0()(64bit)
libboost_prg_exec_monitor.so.1.44.0()(64bit)
libboost_program_options-mt.so.1.44.0()(64bit)
libboost_program_options.so.1.44.0()(64bit)
libboost_python-mt.so.1.44.0()(64bit)
libboost_python.so.1.44.0()(64bit)
libboost_random-mt.so.1.44.0()(64bit)
libboost_random.so.1.44.0()(64bit)
libboost_regex-mt.so.1.44.0()(64bit)
libboost_regex.so.1.44.0()(64bit)
libboost_serialization-mt.so.1.44.0()(64bit)
libboost_serialization.so.1.44.0()(64bit)
libboost_signals-mt.so.1.44.0()(64bit)
libboost_signals.so.1.44.0()(64bit)
libboost_system-mt.so.1.44.0()(64bit)
libboost_system.so.1.44.0()(64bit)
libboost_thread-mt.so.1.44.0()(64bit)
libboost_unit_test_framework-mt.so.1.44.0()(64bit)
libboost_unit_test_framework.so.1.44.0()(64bit)
libboost_wave-mt.so.1.44.0()(64bit)
libboost_wserialization-mt.so.1.44.0()(64bit)
libboost_wserialization.so.1.44.0()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(VersionedDependencies) <= 3.0.3-1
rpmlib(PayloadIsXz) <= 5.2-1
boost-devel 包是唯一具有 boost 头文件的包,它需要其他包,所以你的问题的答案是:不,您无法安装仅提供标头的软件包。Fedora 包通常有其-devel
包需要其他包,该包包含用于使用包中的标头进行编译的任何库,如本例所示。
答案2
Boost 的大部分只是头文件库。但有一些需要编译。 jsbillings 的答案列出了所有这些。如果您不会使用任何需要编译库的库,则不必安装它们。只需安装标头即可。
请参阅此处:Unix 平台入门。
答案3
您可以随时询问 boost 的维护者是否会将不需要共享库的标头拆分到另一个包中。
但我真的想知道为什么 1 美分的磁盘空间在这里很重要?尤其是因为我不会惊讶地发现某些标头不能保证它们永远不需要共享库(即使它们现在是这样实现的)。