Bir sistemdeki Boost sürümü nasıl belirlenir?


140

Bir sistemdeki Boost C ++ kitaplıklarının sürümünü belirlemenin hızlı bir yolu var mı?

Yanıtlar:


97

Bilgi Makrolarını Artırın . Gerekenler:BOOST_VERSION


76
Bunu manüel olarak (kod yerine) bulmak istiyorsanız, include dizinine gidin ve version.hpp dosyasını açın. BOOST_VERSIONbiraz deşifre eder, ama BOOST_LIB_VERSIONoldukça açıktır. Benim değer şu anda"1_42"
TED

4
Linux'ta, "ldd yourprogramname" kullanılması genellikle programınıza hangi boost sürümünün bağlı olduğunu gösterir (farklı olması muhtemel olmasa da, başlıktan bir fark gösterme olasılığı vardır).
Homer6

10
Ayrıca linux,dpkg -S /usr/include/boost/version.hpp
Efreeto

8
Hızlı bir şekilde geçerli değerini aracılığıyla örneğin bakabilirsiniz echo -e '#include <boost/version.hpp>\nBOOST_VERSION' | gcc -x c++ -E -(yani 1,63) 106.300: Fedora 26 - örneğin
maxschlepzig

69

Güçlendirme 1.51.0 ile test edildi:

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

Çıktı: Boost 1.51.0'ı kullanma

1.51.0 - 1.65.0 yükseltme sürümleriyle test edildi


5
ne adanmışlık efendim @Vertexwahn
Vishal Sharma

4
@Vertexwahn serisini kırmak için: 1.60.0 ve 1.61.0 ile de çalışır .
m8mble

4
@Vertexwahn Her türlü sürüm değişikliği için sizi işe almalıdırlar.
PascalVKooten

14
Neden cevabınızı şu şekilde güncellemiyorsunuz: 'Tüm Boost sürümleriyle çalışır (test edilen sürüm 1.51 ila 1.63).' - yorum bölümünü taşmak yerine ...
maxschlepzig

62

Yalnızca kendi bilgilerinizi bilmeniz gerekiyorsa, /usr/include/boost/version.hpp (Ubuntu 13.10) adresine bakın ve bilgileri doğrudan okuyun


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

Güncelleme: cevap düzeltildi.


24
Neden sadece: std::cout << "Boost version: " << BOOST_LIB_VERSION;?
TED

6
Bu kodu çalıştırmak "Boost sürümü: 0.199.60" çıktı, TED sürümü "Boost sürümü: 1_48" çıktı
Homer6 21:13

5
Bu işe yaramıyor. Neden birisi bunu onaylasın ki? Bu kodu gerçekten çalıştıran ve çıktısını alan var mı? Sanırım insanlar "hex" görüyorlar ve doğru olmalı.
JDiMatteo

1
Bu doğru değil. Yükseltme sürümü altıgen değil ondalık olarak saklanır.
Maciek D.

1
Şimdi hariç diğer cevap ile aynı şey ...
eis

13

Desteği nasıl yüklediğinize ve hangi işletim sistemini kullandığınıza bağlı olarak aşağıdakileri de deneyebilirsiniz:

dpkg -s libboost-dev | grep 'Version'

libboost-dev"Güçlendirme" ile aynı mı ? Çünkü çok şey var /usr/include/boostama emriniz veriyor is not installed.
Ben

7

Homebrew kullanarak OS X üzerinde kurulu Boost istenen version.hppdosyayı /usr/local/Cellar/boost/<version>/include/boost/version.hppiçeriyor (sürümün zaten yolda belirtildiğine dikkat edin).

Herhangi bir UNIX benzeri sistemde sürümünü belirlemek için en hızlı yolu boostiçinde aramak olacaktır sanırım /usr:

find /usr -name "boost"


4

Bana gelince, ilk önce (sürüm.hpp'yi bulun, sürüm değişkeninin içinde olduğunu, nerede olduğunu biliyorsanız (ubuntu'da genellikle /usr/include/boost/version.hppvarsayılan kurulumda)):

 locate `boost/version.hpp`

İkinci şovun sürümü:

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

veya

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

Bana gelince, sistemimde iki sürüm artışı var. Çıktı aşağıdaki gibi:

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"

Yüklü yerel sürümü göster:

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

Ben de boost sürüm numarasını öğrenmek için stugeled bash .

Sürüm kodunu bir değişkende saklayan ve hataları bastırarak aşağıdakileri yapın. Bu, kabul edilen cevabın yorumlarında maxschlepzig örneğini kullanır. (Yorum yapamıyorum, 50 Temsilciniz yok)

Bunun uzun zaman önce cevaplandığını biliyorum. Ama hiçbir yerde bash'da nasıl yapacağımı bulamadım. Ben de bunun aynı sorunu olan birine yardımcı olabileceğini düşündüm. Ayrıca, destekleyici nerede kurulursa kurulsun, derleyici bulabildiği sürece bu çalışmalıdır. Ayrıca, yüklü birden çok sürümünüz olduğunda, derleyici tarafından acutally kullanılan sürüm numarasını verecektir.

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

Güzel bir yaklaşım ve açık bir yol yerine <boost / version.hpp> kullanır.
hashlock


0

Homebrew aracılığıyla macOS'ta bir yüklü destek varsa, yüklü yükseltme sürümlerini aşağıdakilerle görebilirsiniz:

ls /usr/local/Cellar/boost*

-1

Zaten cevap verilebilir, ancak bu basit programı deneyip yükleyemeyeceğinizi ve hangi yüklemeye sahip olduğunuzu belirlemek için deneyebilirsiniz:

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

8
Bu gelmiştir zaten neredeyse on yıl önce, yanıtlandı ve açıkça sadece bu sayfayı okuyarak görebilirsiniz.
Yörüngedeki Hafiflik Yarışları
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.