Làm cách nào để xác định phiên bản Boost trên hệ thống?


139

Có cách nào nhanh chóng để xác định phiên bản của thư viện Boost C ++ trên hệ thống không?

Câu trả lời:


97

Tăng cường macro thông tin . Bạn cần:BOOST_VERSION


76
Nếu bạn muốn tìm ra nó một cách thủ công (chứ không phải trong mã), hãy chuyển đến thư mục bao gồm và mở phiên bản.hpp. BOOST_VERSIONmất một chút giải mã, nhưng BOOST_LIB_VERSIONlà khá rõ ràng. Giá trị của tôi hiện tại"1_42"
TED

4
Trong linux, sử dụng "ldd yourprogramname" thường sẽ cho bạn biết phiên bản tăng cường nào được liên kết với chương trình của bạn (có khả năng chỉ ra sự khác biệt so với tiêu đề, mặc dù không chắc là khác).
Homer6

10
Cũng trong linux,dpkg -S /usr/include/boost/version.hpp
Efreeto

8
Bạn có thể nhanh chóng tra cứu giá trị hiện tại thông qua ví dụ echo -e '#include <boost/version.hpp>\nBOOST_VERSION' | gcc -x c++ -E -- ví dụ: trên Fedora 26: 106300 (tức là 1,63)
maxschlepzig

69

Đã thử nghiệm với boost 1.51.0:

std::cout << "Using Boost "     
          << BOOST_VERSION / 100000     << "."  // major version
          << BOOST_VERSION / 100 % 1000 << "."  // minor version
          << BOOST_VERSION % 100                // patch level
          << std::endl;

Đầu ra: Sử dụng Boost 1.51.0

Đã thử nghiệm với các phiên bản boost 1.51.0 đến 1.65.0


5
thật là một sự cống hiến thưa ngài @Vertexwahn
Vishal Sharma

4
Để phá vỡ chuỗi của @Vertexwahn: Cũng hoạt động với 1.60.01.61.0 .
m8mble

4
@Vertexwahn Họ nên thuê bạn cho bất kỳ loại thay đổi phát hành nào.
PascalVKooten

14
Tại sao bạn không cập nhật câu trả lời của mình bằng một cái gì đó như: 'Hoạt động với tất cả các phiên bản Boost (phiên bản thử nghiệm 1.51 đến 1.63).' - thay vì tràn ra phần bình luận ...
maxschlepzig

62

Nếu bạn chỉ cần biết thông tin của riêng mình, chỉ cần tìm trong /usr/include/boost/version.hpp (Ubuntu 13.10) và đọc thông tin trực tiếp


45
#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;
}

Cập nhật: câu trả lời đã được sửa.


24
Tại sao không chỉ : std::cout << "Boost version: " << BOOST_LIB_VERSION;?
TED

6
Chạy mã này đã xuất ra "Phiên bản tăng cường: 0.199.60" trong khi phiên bản của TED xuất ra "Phiên bản tăng cường: 1_48"
Homer6

5
Điều này không hoạt động. Tại sao bất kỳ ai upvote này? Có ai thực sự chạy mã này và nhận được đầu ra hữu ích? Tôi đoán mọi người nhìn thấy "hex" và hình nó phải chính xác.
JDiMatteo

1
Điều này LAF không đúng. Phiên bản Boost được lưu trữ một cách dứt khoát, không phải hình lục giác.
Maciek D.

1
Ngoại trừ bây giờ nó cũng giống như câu trả lời khác ...
eis

13

Tùy thuộc vào cách bạn đã cài đặt boost và hệ điều hành nào bạn đang chạy, bạn cũng có thể thử các cách sau:

dpkg -s libboost-dev | grep 'Version'

libboost-devgiống như "tăng" không? Bởi vì tôi có rất nhiều /usr/include/boostnhưng lệnh của bạn đưa ra is not installed.
Ben

7

Boost được cài đặt trên OS X bằng homebrew có version.hpptệp mong muốn /usr/local/Cellar/boost/<version>/include/boost/version.hpp(lưu ý rằng phiên bản đã được đề cập trong đường dẫn).

Tôi đoán cách nhanh nhất để xác định phiên bản trên bất kỳ hệ thống nào giống UNIX sẽ là tìm kiếm boosttrong /usr:

find /usr -name "boost"


4

Đối với tôi, trước tiên bạn có thể (tìm phiên bản. Hãy biến biến phiên bản nằm trong đó, nếu bạn biết nó ở đâu (trong ubfox nó thường được /usr/include/boost/version.hppcài đặt theo mặc định)):

 locate `boost/version.hpp`

Chương trình thứ hai là phiên bản của:

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

hoặc là

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

Đối với tôi, tôi có hai phiên bản boost được cài đặt trong hệ thống của mình. Đầu ra như sau:

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"

Hiển thị phiên bản cài đặt cục bộ:

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"

3

Tôi cố gắng tìm ra số phiên bản boost trong bash .

Đã kết thúc việc làm sau, trong đó lưu mã phiên bản trong một biến, khắc phục các lỗi. Điều này sử dụng ví dụ từ maxschlepzig trong các ý kiến ​​của câu trả lời được chấp nhận. (Không thể nhận xét, không có 50 Đại diện)

Tôi biết điều này đã được trả lời từ lâu. Nhưng tôi không thể tìm thấy làm thế nào để làm điều đó trong bash bất cứ nơi nào. Vì vậy, tôi nghĩ rằng điều này có thể giúp một người có cùng vấn đề. Ngoài ra, điều này sẽ hoạt động cho dù cài đặt boost ở đâu, miễn là trình comiler có thể tìm thấy nó. Và nó sẽ cung cấp cho bạn số phiên bản được sử dụng bởi comiler, khi bạn cài đặt nhiều phiên bản.

{
VERS=$(echo -e '#include <boost/version.hpp>\nBOOST_VERSION' | gcc -s -x c++ -E - | grep "^[^#;]")
} &> /dev/null

Cách tiếp cận đẹp và như thế nó sử dụng <boost / version.hpp> chứ không phải đường dẫn rõ ràng.
hashlock


0

Nếu một phiên bản boost được cài đặt trên macOS thông qua Homebrew, nhiều khả năng người ta sẽ thấy (các) phiên bản boost được cài đặt với:

ls /usr/local/Cellar/boost*

-1

Có thể đã được trả lời, nhưng bạn có thể thử chương trình đơn giản này để xác định xem bạn có cài đặt boost nào không:

#include<boost/version.hpp>
#include<iostream>
using namespace std;
int main()
{
cout<<BOOST_VERSION<<endl;
return 0;
}

8
đã đã được trả lời, gần một thập kỷ trước, và bạn rõ ràng có thể thấy rằng bằng cách đơn giản đọc trang này.
Các cuộc đua nhẹ nhàng trong quỹ đạo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.