Какое хорошее пошаговое объяснение того, как использовать библиотеку Boost в пустом проекте в Visual Studio 2010?
Пока ответ Nate уже довольно хорош, я собираюсь расширить его более конкретно для Visual Studio 2010 по запросу и включить информацию о компиляции в различные дополнительные компоненты, для которых требуются внешние библиотеки.
Если вы используете только библиотеки заголовков, вам нужно всего лишь разблокировать загрузку boost и настроить переменные среды. В приведенной ниже инструкции задаются переменные среды для Visual Studio, а не для всей системы в целом. Обратите внимание, что вам нужно сделать это только один раз.
C:\boost_1_47_0
).Microsoft.Cpp.<Platform>.user
и выберите Properties
, чтобы открыть страницу свойств для редактирования.VC++ Directories
слева.Include Directories
, чтобы включить путь к вашим исходным файлам boost.Если вы хотите использовать часть boost, требующую построения, но ни одна из функций, которая требует внешних зависимостей, тогда ее создание довольно просто.
C:\boost_1_47_0
).bootstrap.bat
для сборки b2.exe(ранее названный bjam).Запуск b2:
b2 --toolset=msvc-10.0 --build-type=complete stage
;b2 --toolset=msvc-10.0 --build-type=complete architecture=x86 address-model=64 stage
Идите на прогулку/смотрите фильм или 2/....
Library Directories
, чтобы включить путь к выходным файлам выгрузки. (По умолчанию для примера и инструкций выше будет C:\boost_1_47_0\stage\lib
. Переименуйте и переместите каталог сначала, если вы хотите иметь x86 и x64 бок о бок (например, <BOOST_PATH>\lib\x86
и <BOOST_PATH>\lib\x64
).Если вам нужны дополнительные компоненты, у вас больше работы. Это:
Boost.IOStreams Фильтры Bzip2:
C:\bzip2-1.0.6
).-sBZIP2_SOURCE="C:\bzip2-1.0.6"
при запуске b2 на шаге 5.Boost.IOStreams Фильтры Zlib
C:\zlib-1.2.5
).-sZLIB_SOURCE="C:\zlib-1.2.5"
при запуске b2 на шаге 5.Boost.MPI
project-config.jam
в каталоге <BOOST_PATH>
, который появился в результате запуска бутстрапа. Добавьте строку, которая читает using mpi ;
(обратите внимание на пробел перед ';').Boost.Python
Для полностью построенной 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
C:\icu4c-4_8
).<ICU_PATH>\source\allinone
.-sICU_PATH="C:\icu4c-4_8"
при запуске b2 на шаге 5.В то время как инструкции на веб-сайте Boost полезны, вот сжатая версия, которая также создает библиотеки x64.
Это устанавливает заголовочные файлы Boost под C:\Boost\include\boost-(version)
и 32-разрядные библиотеки под C:\Boost\lib\i386
. Обратите внимание, что расположение по умолчанию для библиотек C:\Boost\lib
, но вы хотите поместить их в каталог i386
, если вы планируете строить для нескольких архитектур.
bootstrap
b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\i386 install
toolset=msvc-11.0
toolset=msvc-10.0
C:\Boost\include\boost-(version)
к вашему пути include.C:\Boost\lib\i386
в ваш путь к libs.Это устанавливает заголовочные файлы Boost под C:\Boost\include\boost-(version)
и 64-разрядные библиотеки под C:\Boost\lib\x64
. Обратите внимание, что расположение по умолчанию для библиотек C:\Boost\lib
, но вы хотите поместить их в каталог x64
, если вы планируете строить для нескольких архитектур.
bootstrap
b2 toolset=msvc-12.0 --build-type=complete --libdir=C:\Boost\lib\x64 architecture=x86 address-model=64 install
toolset=msvc-11.0
toolset=msvc-10.0
C:\Boost\include\boost-(version)
к вашему пути include.C:\Boost\lib\x64
в ваш путь к libs.Вы также можете попробовать -j% NUMBER_OF_PROCESSORS% в качестве аргумента использовать все ваши ядра. Делает вещи очень быстро на моем четырехъядерном ядре.
Я мог бы порекомендовать следующий трюк: создать специальный boost.props
файл
Эта процедура имеет значение, которое добавляется только в проекты, в которые вы хотите явно включить его. Когда у вас есть новый проект, который использует 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\
.
Какие части Boost вам нужны? Многие вещи являются частью TR1, который поставляется с Visual Studio, поэтому вы можете просто сказать, например:
#include <tr1/memory>
using std::tr1::shared_ptr;
По словам Джеймса, это также должно работать (в С++ 0x):
#include <memory>
using std::shared_ptr;
std
, как и в стандарте C ++ 0x. (Я думаю, что они, вероятно, также находятся в пространстве имен std::tr1
для обратной совместимости).
Этот поток существует некоторое время, и я подумал, что я добавлю что-то о том, как создать 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
Конфигурация
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-битная сборка занимает немного больше времени, мне нужно сделать то же самое сравнение для этих и обновлений.
Также небольшое примечание. Если вы хотите сократить время компиляции, вы можете добавить флаг
-j2
одновременно запускать две параллельные сборки. Это может уменьшить его для просмотра одного фильма;)
-j2
, увеличит ценность вашего ответа.
Загрузка с: http://www.boost.org/users/download/ например by svn
После этого: 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 → создать пустой проект → перейти к свойствам проекта → установить:
Вставьте этот код и проверьте, работает ли он?
#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;
}
Вот как я смог использовать Boost:
Вы сможете создавать свой проект без ошибок!
Установщики Windows, расположенные здесь, отлично работали для меня. Я сделал следующие шаги:
Удачи!
Небольшое дополнение к KTC очень информативный главный ответ:
Если вы используете бесплатную версию Visual Studio С++ 2010 Express и вам удалось собрать ее, чтобы скомпилировать 64-битные двоичные файлы, и теперь вы хотите использовать ее для использования 64-разрядной версии библиотек Boost, вы можете в конечном итоге с 32-битными библиотеками (ваш пробег может варьироваться, конечно, но на моей машине это печальный случай).
Я мог бы исправить это, используя следующее: между шагами, описанными выше, как
Я установил вызов setenv для установки среды. Для сборки релиза вышеуказанные шаги:
Я нашел эту информацию здесь: http://boost.2283326.n4.nabble.com/64-bit-with-VS-Express-again-td3044258.html
Минимальный пример, чтобы вы начали работу в 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:
Для очень простого примера:
Как установить библиотеки повышения в Visual Studio
Если вы не хотите использовать всю библиотеку boost, просто подмножество:
Использование подмножества библиотек повышения в Windows
Если вы специально хотите узнать о библиотеках, требующих компиляции:
Как использовать скомпилированные библиотеки Boost в Windows
Кроме того, есть что-то, что я нахожу очень полезным. Используйте переменные среды для ваших путей повышения. (Как установить переменные среды в окнах, ссылка внизу на 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 и снова открыть его.