Как использовать Boost в Visual Studio 2010
Что такое хорошее пошаговое объяснение о том, как использовать библиотеку Boost в пустом проекте в Visual Studio?
13 ответов
Хотя ответ Нейта уже довольно хорош, я собираюсь расширить его более подробно для Visual Studio 2010 по запросу и включить информацию о компиляции в различных дополнительных компонентах, для которых требуются внешние библиотеки.
Если вы используете только библиотеки заголовков, то все, что вам нужно сделать, это разархивировать ускоренную загрузку и настроить переменные среды. Приведенная ниже инструкция устанавливает переменные среды только для Visual Studio, а не для всей системы в целом. Обратите внимание, вы должны сделать это только один раз.
- Разархивируйте последнюю версию boost (1.47.0 на момент написания) в каталог по вашему выбору (например,
C:\boost_1_47_0
). - Создайте новый пустой проект в Visual Studio.
- Откройте Property Manager и разверните одну из конфигураций для платформы по вашему выбору.
- Выберите и щелкните правой кнопкой мыши
Microsoft.Cpp.<Platform>.user
и выберитеProperties
открыть страницу свойств для редактирования. - Выбрать
VC++ Directories
налево. - Изменить
Include Directories
раздел, чтобы включить путь к вашим исходным файлам. - При необходимости повторите шаги 3 - 6 для другой платформы по вашему выбору.
Если вы хотите использовать часть надстройки, требующую сборки, но не имеющую функций, требующих внешних зависимостей, то сборка будет достаточно простой.
- Разархивируйте последнюю версию boost (1.47.0 на момент написания) в каталог по вашему выбору (например,
C:\boost_1_47_0
). - Запустите командную строку Visual Studio для выбранной вами платформы и перейдите в нужное место.
- Бежать:
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
- Win32:
Пойду гулять / смотреть фильм или 2 / ....
- Выполните шаги 2 - 6 из набора инструкций выше, чтобы установить переменные среды.
- Изменить
Library Directories
раздел, чтобы включить путь к выходным файлам ваших буст-библиотек. (По умолчанию для примера и инструкций выше будетC:\boost_1_47_0\stage\lib
, Сначала переименуйте и переместите каталог, если вы хотите, чтобы x86 и x64 были рядом (например,<BOOST_PATH>\lib\x86
&<BOOST_PATH>\lib\x64
). - При необходимости повторите шаги 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
). - Следуйте второму набору инструкций для создания надстройки, но добавьте опцию
-sBZIP2_SOURCE="C:\bzip2-1.0.6"
при запуске b2 на шаге 5.
Фильтры Boost.IOStreams Zlib
- Разархивируйте последнюю версию исходных файлов библиотеки zlib (1.2.5 на момент написания) в каталог по вашему выбору (например,
C:\zlib-1.2.5
). - Следуйте второму набору инструкций для создания надстройки, но добавьте опцию
-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 ;
(обратите внимание на пробел перед ';'). - Следуйте остальным шагам из второго набора инструкций выше, чтобы создать надстройку. Если автоопределение установки MPI завершится неудачно, вам нужно будет найти и изменить соответствующий файл сборки, чтобы найти MPI в нужном месте.
Boost.Python
- Установите дистрибутив Python, такой как ActivePtate 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.Regex ICU
- Разархивируйте последнюю версию исходного файла библиотеки ICU4C (4.8 на момент написания) в каталог по вашему выбору (например,
C:\icu4c-4_8
). - Откройте решение Visual Studio в
<ICU_PATH>\source\allinone
, - Build All для конфигурации отладки и выпуска для выбранной вами платформы. Может возникнуть проблема при сборке последних выпусков ICU4C с Visual Studio 2010, когда выходные данные для сборки отладки и выпуска находятся в одном и том же каталоге (что является поведением по умолчанию). Возможный обходной путь - сделать Build All (скажем, отладочной сборки), а затем выполнить Rebuild all во 2-й конфигурации (например, Release build).
- При сборке для x64 вам нужно будет запустить x64 OS, так как есть шаги после сборки, которые включают запуск некоторых 64-битных приложений, которые она собирает.
- При желании удалите исходный каталог, когда закончите.
- Следуйте второму набору инструкций для создания надстройки, но добавьте опцию
-sICU_PATH="C:\icu4c-4_8"
при запуске b2 на шаге 5.
Хотя инструкции на веб-сайте 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
- Для Visual Studio 2017 используйте
toolset=msvc-14.1
- Для Visual Studio 2012 используйте
добавлять
C:\Boost\include\boost-(version)
к вашему пути включения.- добавлять
C:\Boost\lib\i386
к твоему пути.
Сборка 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
- Для Visual Studio 2012 используйте
- добавлять
C:\Boost\include\boost-(version)
к вашему пути включения. - добавлять
C:\Boost\lib\x64
к твоему пути.
Вы также можете попробовать -j%NUMBER_OF_PROCESSORS% в качестве аргумента, он будет использовать все ваши ядра. Делает вещи очень быстро на моем четырехъядерном.
Я мог бы порекомендовать следующий трюк: создать специальный boost.props
файл
- Откройте менеджер недвижимости
- Щелкните правой кнопкой мыши узел вашего проекта и выберите "Добавить страницу свойств нового проекта".
- Выберите местоположение и назовите свой список свойств (например, c:\mystuff\boost.props)
- Измените дополнительные папки Include и Lib для пути поиска.
Эта процедура имеет значение, что boost включен только в проекты, где вы хотите явно включить его. Когда у вас есть новый проект, который использует boost, выполните:
- Откройте менеджер собственности.
- Щелкните правой кнопкой мыши узел проекта и выберите "Добавить существующую страницу свойств".
- Выберите лист свойств boost.
РЕДАКТИРОВАТЬ (после редактирования от @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>
Он содержит пользовательский макрос для местоположения каталога boost (в данном случае 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\
каталог.
Какие части Boost вам нужны? Многие вещи являются частью TR1, который поставляется с Visual Studio, так что вы можете просто сказать, например:
#include <tr1/memory>
using std::tr1::shared_ptr;
По словам Джеймса, это также должно работать (в C++0x):
#include <memory>
using std::shared_ptr;
Эта тема уже давно существует, и я подумал, что хотел бы добавить кое-что о том, КАК собрать Boost как можно быстрее на вашем конкретном оборудовании.
Если у вас 4 или 6-ядерный процессор, используйте -j5 или -j7 соответственно. Конечно, не стандартная сборка, ни -j2, если у вас действительно нет двухъядерности.
Я использую Sandy Bridge Extreme со стандартной тактовой частотой 3930 КБ (6-ядерный) на моей основной станции, но у меня есть 2600 КБ (4-ядерный) на старом бэке резервного копирования, и тенденция в том, что я получаю лучшее время ускоренной компиляции с N + 1 процессы сборки, где N - количество физических ядер. N+2 достигает точки убывающей отдачи, и времена идут вверх.
Примечания: Гиперпоточность включена, 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
конфиг
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-битная сборка занимает немного больше времени, мне нужно сделать то же самое сравнение с ними и обновить.
Скачать буст с: http://www.boost.org/users/download/ например, svn
- Windows -> черепаха (самый простой способ)
После этого: cmd -> перейти в каталог boost ("D:\boostTrunk" - где вы извлекаете или скачиваете и извлекаете пакет): команда:bootstrap
мы создали bjam.exe в ("D:\boostTrunk"). После этого: команда: bjam toolset = msvc-10.0 вариант = отладка, освобождение потоков = multi link = static (это займет некоторое время ~20 минут.)
После этого: Откройте Visual Studio 2010 -> создать пустой проект -> перейдите в свойства проекта -> set:
Вставьте этот код и проверьте, работает ли он?
#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;
}
Также небольшое примечание: если вы хотите уменьшить время компиляции, вы можете добавить флаг
-j2
запустить две параллельные сборки одновременно. Это может уменьшить его до просмотра одного фильма;)
Вот как я смог использовать Boost:
- Загрузите и распакуйте zip-версию библиотек Boost.
- Запустите файл bootstrap.bat, а затем запустите bjam.exe.
- Подождите примерно 30 минут или около того.
- Создайте новый проект в Visual Studio.
- Перейдите в проект -> свойства -> компоновщик -> общие сведения -> дополнительные каталоги библиотеки и добавьте в него каталог boost/stage/lib.
- Перейдите в проект -> свойства ->C/C++-> Общие -> Дополнительные каталоги включения и добавьте в него каталог boost.
Вы сможете построить свой проект без ошибок!
Установщики Windows, расположенные здесь, работали отлично для меня. Я предпринял следующие шаги:
- Следуйте указаниям мастера установки до завершения.
- Запустите визуальную студию.
- Создать новый проект C++
- Открыть свойства проекта (можно найти, щелкнув правой кнопкой мыши имя проекта в обозревателе решений)
- В разделе "C/C++ > Общие> Дополнительные каталоги включения" добавьте путь, по которому нужно увеличить корневой каталог. По умолчанию для моей версии было C:\local\boost_1_63_0. Число после "boost" - это версия boost.
- В свойствах проекта в разделе "Компоновщик> Дополнительные каталоги библиотек" добавьте каталог для файлов библиотек. По умолчанию для моей версии было 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).
Удачи!
Небольшое дополнение к очень информативному основному ответу KTC:
Если вы используете бесплатную Visual Studio C++ 2010 Express и вам удалось получить ее для компиляции 64-битных двоичных файлов, и теперь вы хотите использовать ее для использования 64-битной версии библиотек Boost, вы можете получить 32- библиотеки битов (ваш пробег может меняться, конечно, но на моей машине это печальный случай).
Я мог бы исправить это, используя следующее: между шагами, описанными выше как
- Запустите 32-разрядную командную строку MSVC и перейдите в каталог, куда был разархивирован Boost.
- Run: начальная загрузка
Я вставил вызов 'setenv', чтобы установить среду. Для сборки релиза вышеуказанные шаги становятся:
- Запустите 32-разрядную командную строку MSVC и перейдите в каталог, куда был разархивирован Boost.
- Выполните: "C: \ Program Files \ Microsoft SDKs \ Windows \ v7.1 \ Bin \ setenv.cmd" / Release / x64
- Run: начальная загрузка
Я нашел эту информацию здесь: http://boost.2283326.n4.nabble.com/64-bit-with-VS-Express-again-td3044258.html
Минималистский пример начала работы в Visual Studio:
1. Загрузите и разархивируйте Boost отсюда.
2. Создайте пустой проект Visual Studio, используя пример библиотеки повышения, которая не требует отдельной компиляции:
#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 установите дополнительные каталоги включения:
Для очень простого примера:
Как установить Boost библиотеки в Visual Studio
Если вы не хотите использовать всю библиотеку Boost, просто подмножество:
Использование подмножества буст-библиотек в Windows
Если вы специально хотите узнать о библиотеках, которые требуют компиляции:
Как использовать скомпилированные библиотеки Boost в Windows
Кроме того, есть кое-что, что я считаю очень полезным. Используйте переменные окружения для ваших путей повышения. (Как установить переменные окружения в windows, ссылка внизу для 7,8,10) Переменная BOOST_ROOT, кажется, больше не используется, и для нее задан корневой путь, в который вы распаковываете boost.
Затем в свойствах, C++, вообще, дополнительные каталоги включают использование $(BOOST_ROOT)
, Затем, если / когда вы перейдете на более новую версию библиотеки boost, вы можете обновить переменную среды, указав на эту более новую версию. Как и в других ваших проектах, используйте boost, вам не придется обновлять "Дополнительные каталоги включения" для всех них.
Вы также можете создать переменную BOOST_LIB и указать ей, где находятся библиотеки. Так же и для Linker->Additional Library Directory, вам не придется обновлять проекты. У меня есть некоторые старые вещи, созданные с vs10, и новые вещи с vs14, так что оба варианта библиотеки Boost встроены в одну и ту же папку. Поэтому, если я перенесу проект с vs10 на vs14, мне не нужно менять пути повышения.
ПРИМЕЧАНИЕ. Если вы измените переменную среды, она не будет внезапно работать в открытом проекте VS. VS загружает переменные при запуске. Так что вам придется закрыть VS и снова открыть его.