如何确定系统中的Boost版本?

168

有没有一种快速确定系统上Boost C++库版本的方法?

14个回答

106

85
如果你想手动找出版本号(而不是在代码中找),请前往include目录并打开version.hpp文件。BOOST_VERSION需要一些解析,但BOOST_LIB_VERSION相对清晰。我的值目前是"1_42"。 - T.E.D.
4
在Linux中,使用“ldd yourprogramname”命令通常会显示您的程序链接的Boost版本(这可能表明与头文件不同,但不太可能不同)。 - Homer6
12
同样在Linux中,dpkg -S /usr/include/boost/version.hpp 的意思是查找安装了哪个软件包提供了 /usr/include/boost/version.hpp 文件。 - Efreeto
13
您可以通过例如 echo -e '#include <boost/version.hpp>\nBOOST_VERSION' | gcc -x c++ -E - 快速查看当前值,例如在 Fedora 26 上的值为 106300(即 1.63)。请注意,本翻译尽力使内容易懂,但未改变原意。 - maxschlepzig

91
包含 #include <boost/version.hpp>
std::cout << "Using Boost "     
          << BOOST_VERSION / 100000     << "."  // major version
          << BOOST_VERSION / 100 % 1000 << "."  // minor version
          << BOOST_VERSION % 100                // patch level
          << std::endl;

使用Boost 1.75.0版本。 已测试通过Boost 1.51.0至1.63、1.71.0以及1.76.0至1.83.0版本。

5
太敬业了,先生 @Vertexwahn - Vishal Sharma
4
打破 @Vertexwahn 的连胜:也可使用 1.60.01.61.0 - m8mble
4
他们应该雇用你来进行任何类型的发布更改。 - PascalVKooten
16
为什么不直接更新你的回答,加上类似这样的内容:“适用于所有Boost版本(经过测试的版本为1.51至1.63)”,而不是在评论区里写得过多呢? - maxschlepzig

75
如果只是为了获取个人信息,只需查看 /usr/include/boost/version.hpp(Ubuntu 13.10),并直接阅读相关信息。

47
#include <boost/version.hpp>
#include <iostream>
#include <iomanip>

int main()
{
    std::cout << "Boost version: " 
          << BOOST_VERSION / 100000
          << "."
          << BOOST_VERSION / 100 % 1000
          << "."
          << BOOST_VERSION % 100 
          << std::endl;
    return 0;
}

更新:已经修复答案。


24
为什么不直接使用 std::cout << "Boost version: " << BOOST_LIB_VERSION; 呢? - T.E.D.
6
运行此代码输出 "Boost version: 0.199.60",而 T.E.D. 的版本输出 "Boost version: 1_48"。 - Homer6
5
这个不起作用。为什么会有人点赞这个?有人实际运行过这段代码并获得了有用的输出吗?我想人们看到“十六进制”就认为它一定是正确的。 - JDiMatteo
Vertexwahn的回答是使用BOOST_VERSION的文档所说的方法。 - paulm
1
这不正确。Boost版本是以十进制存储的,而不是十六进制。 - Maciek D.
2
现在除了另一个答案之外,就是同样的东西了... - eis

25

根据您安装boost的方式和所运行的操作系统,您也可以尝试以下方法:

dpkg -s libboost-dev | grep 'Version'

libboost-dev和"boost"是一样的吗?因为我在/usr/include/boost中有很多文件,但是您的命令提示说它们未安装。 - bomben

8

使用homebrew在OS X上安装的Boost,在/usr/local/Cellar/boost/<version>/include/boost/version.hpp中有所需的version.hpp文件(请注意,版本已经在路径中提到)。

我想在任何类UNIX系统上确定版本的最快方法是在/usr中搜索boost

find /usr -name "boost"


6

对我来说,你首先可以找到 version.hpp 文件,版本变量就在其中。如果你知道它的位置(在 Ubuntu 中,默认安装时通常位于 /usr/include/boost/version.hpp),请按照此路径找到。

 locate `boost/version.hpp`

通过以下方式显示第二版的版本:

 grep BOOST_LIB_VERSION /usr/include/boost/version.hpp

或者

  grep BOOST_VERSION /usr/include/boost/version.hpp.

就我而言,我在我的系统中安装了两个版本的boost。输出如下:

xy@xy:~$ locate boost/version.hpp |grep boost

/home/xy/boost_install/boost_1_61_0/boost/version.hpp
/home/xy/boost_install/lib/include/boost/version.hpp
/usr/include/boost/version.hpp

xy@xy:~$ grep BOOST_VERSION /usr/include/boost/version.hpp
#ifndef BOOST_VERSION_HPP
#define BOOST_VERSION_HPP
//  BOOST_VERSION % 100 is the patch level
//  BOOST_VERSION / 100 % 1000 is the minor version
//  BOOST_VERSION / 100000 is the major version
#define BOOST_VERSION 105800
//  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION

# or this way more readable
xy@xy:~$ grep BOOST_LIB_VERSION /usr/include/boost/version.hpp
//  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
#define BOOST_LIB_VERSION "1_58"

显示本地已安装版本:

xy@xy:~$ grep BOOST_LIB_VERSION /home/xy/boost_install/lib/include/boost/version.hpp
//  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
#define BOOST_LIB_VERSION "1_61"

6

以下是使用Bash编写的@Vertexwahns答案,适合懒人:

boost_version=$(cat /usr/include/boost/version.hpp | grep define | grep "BOOST_VERSION " | cut -d' ' -f3)
echo "installed boost version: $(echo "$boost_version / 100000" | bc).$(echo "$boost_version / 100 % 1000" | bc).$(echo "$boost_version % 100 " | bc)"

显示当前安装的boost版本为:1.71.0


5
我在bash中苦苦寻找boost版本号,最终通过以下方法解决,将版本代码存储在一个变量中,并抑制错误。这个例子使用了maxschlepzig在被接受的答案评论中提供的示例。(无法发表评论,没有50点声望)我知道这个问题早就有人回答了,但我找不到如何在bash中做到这一点的任何信息。因此,我认为这可能会帮助遇到同样问题的人。同时,只要编译器能够找到它,这应该适用于任何安装了boost的地方。当您安装了多个版本时,它将为您提供实际使用的版本号。
{
VERS=$(echo -e '#include <boost/version.hpp>\nBOOST_VERSION' | gcc -s -x c++ -E - | grep "^[^#;]")
} &> /dev/null

1
不错的方法,喜欢它使用<boost/version.hpp>而不是显式路径。 - hashlock

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接