Как использовать Boost в Visual Studio 2010

343

Какое хорошее пошаговое объяснение того, как использовать библиотеку Boost в пустом проекте в Visual Studio 2010?

Теги:
boost
visual-studio-2010

13 ответов

460
Лучший ответ

Пока ответ Nate уже довольно хорош, я собираюсь расширить его более конкретно для Visual Studio 2010 по запросу и включить информацию о компиляции в различные дополнительные компоненты, для которых требуются внешние библиотеки.

Если вы используете только библиотеки заголовков, вам нужно всего лишь разблокировать загрузку boost и настроить переменные среды. В приведенной ниже инструкции задаются переменные среды для Visual Studio, а не для всей системы в целом. Обратите внимание, что вам нужно сделать это только один раз.

  • Отсоедините последнюю версию boost (1.47.0 от записи) в каталог по вашему выбору (например, C:\boost_1_47_0).
  • Создайте новый пустой проект в Visual Studio.
  • Откройте диспетчер свойств и разверните одну из конфигураций для выбранной вами платформы.
  • Выберите и щелкните правой кнопкой мыши Microsoft.Cpp.<Platform>.user и выберите Properties, чтобы открыть страницу свойств для редактирования.
  • Выберите VC++ Directories слева.
  • Отредактируйте раздел Include Directories, чтобы включить путь к вашим исходным файлам boost.
  • Повторите шаги 3 - 6 для разных платформ, если это необходимо.

Если вы хотите использовать часть boost, требующую построения, но ни одна из функций, которая требует внешних зависимостей, тогда ее создание довольно просто.

  • Отсоедините последнюю версию boost (1.47.0 от записи) в каталог по вашему выбору (например, C:\boost_1_47_0).
  • Запустите командную строку Visual Studio для выбранной вами платформы и перейдите туда, где есть boost.
  • Запуск: bootstrap.bat для сборки b2.exe(ранее названный bjam).
  • Запуск b2:

    • Win32: b2 --toolset=msvc-10.0 --build-type=complete stage;
    • x64: b2 --toolset=msvc-10.0 --build-type=complete architecture=x86 address-model=64 stage

Идите на прогулку/смотрите фильм или 2/....

  1. Перейдите к шагам 2 - 6 из набора инструкций выше, чтобы установить переменные среды.
  2. Отредактируйте раздел Library Directories, чтобы включить путь к выходным файлам выгрузки. (По умолчанию для примера и инструкций выше будет C:\boost_1_47_0\stage\lib. Переименуйте и переместите каталог сначала, если вы хотите иметь x86 и x64 бок о бок (например, <BOOST_PATH>\lib\x86 и <BOOST_PATH>\lib\x64).
  3. Повторите шаги 2 - 6 для любой выбранной вами платформы.

Если вам нужны дополнительные компоненты, у вас больше работы. Это:

  • Фильтры Boost.IOStreams Bzip2
  • Boost.IOStreams Фильтры Zlib
  • Boost.MPI
  • Boost.Python
  • Поддержка Boost.Regex ICU

Boost.IOStreams Фильтры Bzip2:

  • Отсоедините последнюю версию библиотеки bzip2 (1.0.6 от записи) исходных файлов в каталог по вашему выбору (например, C:\bzip2-1.0.6).
  • Следуйте второму набору инструкций выше, чтобы создать boost, но добавьте опцию -sBZIP2_SOURCE="C:\bzip2-1.0.6" при запуске b2 на шаге 5.

Boost.IOStreams Фильтры Zlib

  • Отсоедините последнюю версию библиотеки zlib (1.2.5 от записи) исходных файлов в каталог по вашему выбору (например, C:\zlib-1.2.5).
  • Следуйте второму набору инструкций выше, чтобы создать boost, но добавьте опцию -sZLIB_SOURCE="C:\zlib-1.2.5" при запуске b2 на шаге 5.

Boost.MPI

  • Установите дистрибутив MPI, такой как пакет Microsoft Compute Cluster Pack.
  • Выполните шаги 1 - 3 из второго набора инструкций выше, чтобы повысить уровень.
  • Отредактируйте файл project-config.jam в каталоге <BOOST_PATH>, который появился в результате запуска бутстрапа. Добавьте строку, которая читает using mpi ; (обратите внимание на пробел перед ';').
  • Следуйте остальным шагам из второго набора инструкций выше, чтобы создать boost. Если автоматическое обнаружение установки MPI завершается неудачно, вам нужно будет искать и модифицировать соответствующий файл сборки, чтобы искать MPI в нужном месте.

Boost.Python

  • Установите дистрибутив Python, такой как ActiveState ActivePython. Убедитесь, что установка Python находится в вашем PATH.
  • Для полностью построенной 32-битной версии библиотеки требуется 32-битный Python и аналогично для 64-битной версии. Если у вас несколько версий, установленных по этой причине, вам нужно указать b2, где найти определенную версию и когда использовать ее. Один из способов сделать это - отредактировать файл project-config.jam в каталоге <BOOST_PATH>, который появился в результате запуска бутстрапа. Добавьте следующие две строки, которые соответствуют вашим путям и версиям установки Python (обратите внимание на пробел перед ';').

    using python : 2.6 : C:\\Python\\Python26\\python ;

    using python : 2.6 : C:\\Python\\Python26-x64\\python : : : <address-model>64 ;

    Обратите внимание, что такая явная спецификация Python в настоящее время приводит к сбою сборки MPI. Поэтому вам нужно будет сделать отдельное здание с спецификацией и без нее, чтобы все строить, если вы также создаете MPI.

  • Следуйте второму набору инструкций выше, чтобы создать boost.

Поддержка Boost.Regex ICU

  • 0
    @ Сорин: зачем тебе это менять?
  • 0
    спасибо за исправление для property_tree
Показать ещё 9 комментариев
145

В то время как инструкции на веб-сайте Boost полезны, вот сжатая версия, которая также создает библиотеки x64.

  • Вам нужно сделать это, только если вы используете одну из библиотек, упомянутых в раздел 3 на странице инструкций. (Например, для использования Boost.Filesystem требуется компиляция.) Если вы не используете ни один из них, просто распакуйте и отпустите.

Построить 32-разрядные библиотеки

Это устанавливает заголовочные файлы Boost под C:\Boost\include\boost-(version) и 32-разрядные библиотеки под C:\Boost\lib\i386. Обратите внимание, что расположение по умолчанию для библиотек C:\Boost\lib, но вы хотите поместить их в каталог i386, если вы планируете строить для нескольких архитектур.

  • Разархивируйте Boost в новый каталог.
  • Запустите 32-разрядную командную строку MSVC и перейдите в каталог, в котором Boost был распакован.
  • Выполнить: bootstrap
  • Запуск: b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\i386 install
    • Для Visual Studio 2012 используйте toolset=msvc-11.0
    • Для Visual Studio 2010 используйте toolset=msvc-10.0
  • Добавьте C:\Boost\include\boost-(version) к вашему пути include.
  • Добавьте C:\Boost\lib\i386 в ваш путь к libs.

Сборка 64-разрядных библиотек

Это устанавливает заголовочные файлы Boost под C:\Boost\include\boost-(version) и 64-разрядные библиотеки под C:\Boost\lib\x64. Обратите внимание, что расположение по умолчанию для библиотек C:\Boost\lib, но вы хотите поместить их в каталог x64, если вы планируете строить для нескольких архитектур.

  • Разархивируйте Boost в новый каталог.
  • Запустите 64-битную командную строку MSVC и перейдите в каталог, в котором Boost был распакован.
  • Выполнить: bootstrap
  • Выполнить: b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\x64 architecture=x86 address-model=64 install
    • Для Visual Studio 2012 используйте toolset=msvc-11.0
    • Для Visual Studio 2010 используйте toolset=msvc-10.0
  • Добавьте C:\Boost\include\boost-(version) к вашему пути include.
  • Добавьте C:\Boost\lib\x64 в ваш путь к libs.
  • 23
    Если вы не хотите создавать их самостоятельно, вы можете установить готовые двоичные файлы из sourceforge: sourceforge.net/projects/boost/files/boost-binaries Для каждой версии boost существуют установщики для каждой версии visual studio (в как 32, так и 64 бит).
  • 0
    В чем причина использования архитектуры = x86 вместо архитектуры = x64 при 64-битной сборке? РЕДАКТИРОВАТЬ: Просто выяснил трудный путь: P Вы не можете переключиться на 64 ...
Показать ещё 2 комментария
18

Вы также можете попробовать -j% NUMBER_OF_PROCESSORS% в качестве аргумента использовать все ваши ядра. Делает вещи очень быстро на моем четырехъядерном ядре.

  • 3
    На этот раз миллион ... Это то, что я в конечном итоге предпринял в качестве объединенного усилия для VS2015: b2 -j% NUMBER_OF_PROCESSORS% toolset = msvc-14.0 --build-type = complete --libdir = C: \ Boost \ lib \ x64 архитектура = модель адреса x86 = установить 64
13

Я мог бы порекомендовать следующий трюк: создать специальный boost.props файл

  • Откройте диспетчер свойств
  • Щелкните правой кнопкой мыши по проекту node и выберите "Добавить новую страницу свойств проекта".
  • Выберите местоположение и назовите свой лист свойств (например, c:\mystuff\boost.props)
  • Измените дополнительные папки Include и Lib в пути поиска.

Эта процедура имеет значение, которое добавляется только в проекты, в которые вы хотите явно включить его. Когда у вас есть новый проект, который использует boost, выполните следующие действия:

  • Откройте диспетчер свойств.
  • Щелкните правой кнопкой мыши по проекту node и выберите "Добавить существующую страницу свойств".
  • Выберите лист свойств boost.

EDIT (после редактирования из @jim-fred):

Полученный файл boost.props выглядит примерно так:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros">
    <BOOST_DIR>D:\boost_1_53_0\</BOOST_DIR>
  </PropertyGroup>
  <PropertyGroup>
    <IncludePath>$(BOOST_DIR);$(IncludePath)</IncludePath>
    <LibraryPath>$(BOOST_DIR)stage\lib\;$(LibraryPath)</LibraryPath>
  </PropertyGroup>
</Project>

Он содержит пользовательский макрос для расположения ускоряющего каталога (в данном случае D:\boost_1_53_0) и двух других параметров: IncludePath и LibraryPath. Оператор #include <boost/thread.hpp> найдет thread.hpp в соответствующем каталоге (в данном случае D:\boost_1_53_0\boost\thread.hpp). Каталог "stage\lib \" может меняться в зависимости от установленного каталога.

Этот файл boost.props может быть расположен в каталоге D:\boost_1_53_0\.

13

Какие части Boost вам нужны? Многие вещи являются частью TR1, который поставляется с Visual Studio, поэтому вы можете просто сказать, например:

#include <tr1/memory>

using std::tr1::shared_ptr;

По словам Джеймса, это также должно работать (в С++ 0x):

#include <memory>

using std::shared_ptr;
  • 5
    В VS2010 библиотеки TR1, которые становятся частью C ++ 0x, были перемещены в пространство имен std , как и в стандарте C ++ 0x. (Я думаю, что они, вероятно, также находятся в пространстве имен std::tr1 для обратной совместимости).
5

Этот поток существует некоторое время, и я подумал, что я добавлю что-то о том, как создать Boost как можно быстрее на вашем конкретном оборудовании.

Если у вас есть 4 или 6-ядерное использование -j5 или -j7 соответственно. Конечно, не стандартная сборка ни -j2, если у вас действительно нет двойного ядра.

Я запускаю Sandy Bridge Extreme со штатным 3930K (6-ядерным) на моей основной станции, но имею 2600k (4-ядерный) в старой резервной копии, и тенденция заключается в том, что я получаю лучшее время компиляции Boost с N + 1 процессами сборки, где N - количество физических ядер. N + 2 достигает точки убывающих возвратов и увеличивается время.

Примечания: включен Hyperthreading, 32 ГБ оперативной памяти DDR3, Samsung 840 EVO SSD.

-j7 на 6-ядерном (2 минуты и 51 секунде) (Win7 Ultimate x64) (Visual Studio 2013)

PS C:\Boost\boost_1_56_0> measure-command { .\b2 -j7 --build-type=complete msvc stage }

Days              : 0
Hours             : 0
Minutes           : 2
Seconds           : 51
Milliseconds      : 128
Ticks             : 1711281830
TotalDays         : 0.0019806502662037
TotalHours        : 0.0475356063888889
TotalMinutes      : 2.85213638333333
TotalSeconds      : 171.128183
TotalMilliseconds : 171128.183

-j6 на 6-ядерном (3 минуты и 2 секунды) (Win7 Ultimate x64) (Visual Studio 2013)

PS C:\Boost\boost_1_56_0> measure-command { .\b2 -j6 --build-type=complete msvc stage }

Days              : 0
Hours             : 0
Minutes           : 3
Seconds           : 2
Milliseconds      : 809
Ticks             : 1828093904
TotalDays         : 0.00211584942592593
TotalHours        : 0.0507803862222222
TotalMinutes      : 3.04682317333333
TotalSeconds      : 182.8093904
TotalMilliseconds : 182809.3904

-j8 на 6-ядерном (3 минуты и 17 секунд) (Win7 Ultimate x64) (Visual Studio 2013)

PS C:\Boost\boost_1_56_0> measure-command { .\b2 -j8 --build-type=complete msvc stage }

Days              : 0
Hours             : 0
Minutes           : 3
Seconds           : 17
Milliseconds      : 652
Ticks             : 1976523915
TotalDays         : 0.00228764342013889
TotalHours        : 0.0549034420833333
TotalMinutes      : 3.294206525
TotalSeconds      : 197.6523915
TotalMilliseconds : 197652.3915

Изображение 1209

Конфигурация

Building the Boost C++ Libraries.


Performing configuration checks

    - 32-bit                   : yes (cached)
    - arm                      : no  (cached)
    - mips1                    : no  (cached)
    - power                    : no  (cached)
    - sparc                    : no  (cached)
    - x86                      : yes (cached)
    - has_icu builds           : no  (cached)
warning: Graph library does not contain MPI-based parallel components.
note: to enable them, add "using mpi ;" to your user-config.jam
    - zlib                     : no  (cached)
    - iconv (libc)             : no  (cached)
    - iconv (separate)         : no  (cached)
    - icu                      : no  (cached)
    - icu (lib64)              : no  (cached)
    - message-compiler         : yes (cached)
    - compiler-supports-ssse3  : yes (cached)
    - compiler-supports-avx2   : yes (cached)
    - gcc visibility           : no  (cached)
    - long double support      : yes (cached)
warning: skipping optional Message Passing Interface (MPI) library.
note: to enable MPI support, add "using mpi ;" to user-config.jam.
note: to suppress this message, pass "--without-mpi" to bjam.
note: otherwise, you can safely ignore this message.
    - zlib                     : no  (cached)

Я отмечаю, что 64-битная сборка занимает немного больше времени, мне нужно сделать то же самое сравнение для этих и обновлений.

5

Также небольшое примечание. Если вы хотите сократить время компиляции, вы можете добавить флаг

-j2

одновременно запускать две параллельные сборки. Это может уменьшить его для просмотра одного фильма;)

  • 2
    Объяснение того, как использовать -j2 , увеличит ценность вашего ответа.
4

Загрузка с: http://www.boost.org/users/download/ например by svn

  • Windows → черепаха (самый простой способ)

После этого: cmd → go to boost directory ( "D:\boostTrunk" - где вы заказываете или загружаете и извлекаете пакет): команда: самозагрузки

мы создали bjam.exe в ( "D:\boostTrunk" ) После этого: команда:    bjam toolset = msvc-10.0 variant = debug, release threading = multi link = static (Это займет некоторое время ~ 20 минут.)

После этого: Открыть Visual studio 2010 → создать пустой проект → перейти к свойствам проекта → установить:

Изображение 1210

Вставьте этот код и проверьте, работает ли он?

#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/regex.hpp>

using namespace std;

struct Hello 
{
    Hello(){ 
        cout << "Hello constructor" << endl;
    }

    ~Hello(){
        cout << "Hello destructor" << endl;
        cin.get();
    }
};


int main(int argc, char**argv)
{
    //Boost regex, compiled library
    boost::regex regex("^(Hello|Bye) Boost$");
    boost::cmatch helloMatches;
    boost::regex_search("Hello Boost", helloMatches, regex);
    cout << "The word between () is: " << helloMatches[1] << endl;

    //Boost shared pointer, header only library
    boost::shared_ptr<Hello> sharedHello(new Hello);

    return 0;
}

Ресурсы: https://www.youtube.com/watch?v=5AmwIwedTCM

4

Вот как я смог использовать Boost:

  • Загрузите и извлеките zip-версию библиотек Boost.
  • Запустите файл bootstrap.bat, а затем запустите файл bjam.exe.
  • Подождите примерно 30 минут.
  • Создайте новый проект в Visual Studio.
  • Перейдите в проект → Свойства → Коннектор → Общие → Дополнительные библиотеки и добавьте в него каталог boost/stage/lib.
  • Перейдите в проект → свойства → C/С++ → Общие → Дополнительные каталоги Include и добавьте в него файл boost.

Вы сможете создавать свой проект без ошибок!

3

Установщики Windows, расположенные здесь, отлично работали для меня. Я сделал следующие шаги:

  • Следуйте указаниям мастера установки до завершения.
  • Запустите визуальную студию.
  • Создайте новый проект на С++
  • Откройте свойства проекта (можно найти, щелкнув правой кнопкой мыши имя проекта в проводнике решений)
  • В разделе "C/С++ > Общие > Дополнительные каталоги включения" добавьте путь, в котором добавлен корневой каталог. По умолчанию для моей версии был C:\local\boost_1_63_0. Число после "boost" - это версия boost.
  • В свойствах проекта в разделе "Linker > Additional Library Directories" добавьте каталог для файлов библиотеки. По умолчанию для моей версии был C:\local\boost_1_63_0\lib64-msvc-14.0. Число после "lib" связано с целью сборки (32 бит или 64 бит в Visual Studio), а число после "msvc" связано с версией Visual Studio (14.0 связано с Visual Studio 2015, но я используя его с Visual Studio 2017).

Удачи!

2

Небольшое дополнение к KTC очень информативный главный ответ:

Если вы используете бесплатную версию Visual Studio С++ 2010 Express и вам удалось собрать ее, чтобы скомпилировать 64-битные двоичные файлы, и теперь вы хотите использовать ее для использования 64-разрядной версии библиотек Boost, вы можете в конечном итоге с 32-битными библиотеками (ваш пробег может варьироваться, конечно, но на моей машине это печальный случай).

Я мог бы исправить это, используя следующее: между шагами, описанными выше, как

  • Запустите 32-разрядную командную строку MSVC и перейдите в каталог, в котором Boost был распакован.
  • Run: bootstrap

Я установил вызов setenv для установки среды. Для сборки релиза вышеуказанные шаги:

  • Запустите 32-разрядную командную строку MSVC и перейдите в каталог, в котором Boost был распакован.
  • Выполнить: "C:\Program Files\Microsoft SDK\Windows\v7.1\Bin\setenv.cmd" /Release/x 64
  • Run: bootstrap

Я нашел эту информацию здесь: http://boost.2283326.n4.nabble.com/64-bit-with-VS-Express-again-td3044258.html

  • 0
    Знаете ли вы, относится ли это к Community Edition VS2015? Я, кажется, в конечном итоге с 32-разрядными двоичными файлами, несмотря на предоставление "address-model = 64"
  • 0
    @ paxos1977 Извините, я не знаю - я не пробовал это для VS2015.
Показать ещё 1 комментарий
1

Минимальный пример, чтобы вы начали работу в Visual Studio:

1. Download и разархивируйте Boost здесь.

2. Создайте пустой проект Visual Studio, используя примерную библиотеку boost, которая не требует отдельной компиляции:

#include <iostream>
#include <boost/format.hpp>

using namespace std;  
using namespace boost;  

int main()  
{  
    unsigned int arr[5] = { 0x05, 0x04, 0xAA, 0x0F, 0x0D };  

    cout << format("%02X-%02X-%02X-%02X-%02X")  
            % arr[0]  
            % arr[1]  
            % arr[2]  
            % arr[3]  
            % arr[4]  
         << endl;  
}  

3. В свойствах проекта Visual Studio задайте дополнительные каталоги Include:

Изображение 1211

Для очень простого примера:

Как установить библиотеки повышения в Visual Studio

Если вы не хотите использовать всю библиотеку boost, просто подмножество:

Использование подмножества библиотек повышения в Windows

Если вы специально хотите узнать о библиотеках, требующих компиляции:

Как использовать скомпилированные библиотеки Boost в Windows

0

Кроме того, есть что-то, что я нахожу очень полезным. Используйте переменные среды для ваших путей повышения. (Как установить переменные среды в окнах, ссылка внизу на 7,8,10) Переменная BOOST_ROOT, похоже, больше всего распространена и установите на корневой путь, где вы разархивируете форматирование.

Затем в свойствах, С++, general, Дополнительные каталоги Include используют $(BOOST_ROOT). Затем, если /, когда вы переходите к более новой версии библиотеки boost, вы можете обновить переменную среды, чтобы указать на эту более новую версию. Поскольку больше ваших проектов, используйте boost, вам не придется обновлять "дополнительные каталоги Include" для всех из них.

Вы также можете создать переменную BOOST_LIB и указать ее на место, где размещаются библиотеки. Точно так же для Linker- > Additional Library Directories вам не придется обновлять проекты. У меня есть некоторые старые вещи, созданные с vs10, и новые вещи с vs14, так что были созданы оба варианта boost lib в той же папке. Поэтому, если я перемещаю проект с vs10 на vs14, мне не нужно менять пути boost.

ПРИМЕЧАНИЕ. Если вы измените переменную среды, она не будет внезапно работать в открытом проекте VS. VS загружает переменные при запуске. Поэтому вам придется закрыть VS и снова открыть его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню