Що є гарним покроковим поясненням щодо використання бібліотеки Boost у порожньому проекті у Visual Studio?
Що є гарним покроковим поясненням щодо використання бібліотеки Boost у порожньому проекті у Visual Studio?
Відповіді:
Хоча відповідь Нейта вже досить хороша, я збираюся розширити її більш конкретно для Visual Studio 2010, як вимагається, і включати інформацію про компіляцію в різні додаткові компоненти, для яких потрібні зовнішні бібліотеки.
Якщо ви використовуєте заголовки лише бібліотеки, то все, що вам потрібно зробити, - це заборонити завантаження прискореного завантаження та встановити змінні середовища. Наведена нижче інструкція встановлює змінні середовища лише для Visual Studio, а не для всієї системи в цілому. Зауважте, що робити це потрібно лише один раз.
C:\boost_1_47_0
).Microsoft.Cpp.<Platform>.user
та виберіть, Properties
щоб відкрити сторінку власності для редагування.VC++ Directories
зліва.Include Directories
розділ, щоб включити шлях до початкових файлів підсилення.Якщо ви хочете використовувати ту частину прискорень, яка потребує побудови, але жодну з функцій, яка не потребує зовнішніх залежностей, то побудувати її досить просто.
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.Підвищення.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.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
toolset=msvc-14.1
Додайте C:\Boost\include\boost-(version)
до свого шляху включення.
C:\Boost\lib\i386
до свого контуру.При цьому встановлюються файли заголовків 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)
до свого шляху включення.C:\Boost\lib\x64
до свого контуру.Ви також можете спробувати -j% NUMBER_OF_PROCESSORS% як аргумент, він використовуватиме всі ваші ядра. Робить речі дуже швидкими на моєму чотирьохядра.
Я можу порекомендувати наступний трюк: Створіть спеціальний boost.props
файл
Ця процедура має значення, що прискорення включається лише в проекти, де ви хочете явно включити їх. Коли у вас є новий проект, який використовує стимулювання, виконайте:
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>
Він містить макрос користувача для розташування каталогу boost (в даному випадку D: \ boost_1_53_0) та двох інших параметрів: IncludePath та LibraryPath. Заява #include <boost/thread.hpp>
знайде thread.hpp у відповідному каталозі (в даному випадку D: \ boost_1_53_0 \ підштовхування \ 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;
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 on 6-core (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
Після цього: cmd -> перейдіть до boost каталогу ("D: \ boostTrunk" - де ви перевіряєте або завантажуєте та витягуєте пакет): command: bootstrap
ми створили bjam.exe в ("D: \ boostTrunk") Після цього: команда: набір інструментів bjam = msvc-10.0 варіант = налагодження, випуск потокової передачі = кілька посилань = статичний (це займе деякий час ~ 20 хв.)
Після цього: Open 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:
Ви зможете побудувати свій проект без будь-яких помилок!
Монтажники Вікна , розташовані тут працювали відмінно для мене. Я зробив такі кроки:
Удачі!
Невелике доповнення до дуже інформативної основної відповіді KTC:
Якщо ви використовуєте безкоштовну програму Visual Studio c ++ 2010 Express і вам вдалося отримати її для компіляції 64-бітових бінарних файлів, а тепер ви хочете використовувати її для використання 64-бітної версії лістовиків Boost, можливо, ви отримаєте 32- біт-бібліотеки (ваш пробіг може змінюватися, звичайно, але на моїй машині це сумний випадок).
Я можу це виправити за допомогою наступного: між кроками, описаними вище як
Я вставив дзвінок на "setenv", щоб встановити середовище. Для складання версії описані вище кроки:
Я знайшов цю інформацію тут: 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 встановіть Додаткові каталоги включення:
Наведемо дуже простий приклад:
Як встановити збільшені бібліотеки у Visual Studio
Якщо ви не хочете використовувати всю бібліотеку збільшення, просто підмножину:
Використання підмножини прискорених бібліотек у Windows
Якщо ви зараз спеціально хочете про бібліотеки, які потребують компіляції:
Крім того, є щось, що мені здається дуже корисним. Використовуйте змінні середовища для своїх шляхів підвищення. (Як встановити змінні середовища у Windows, посилання знизу для 7,8,10) Змінна BOOST_ROOT, здається, більше не є загальним місцем і встановлюється на кореневий шлях, де ви розкручуєте прискорення.
Потім у Властивості, c ++, загальне, Додаткове включення каталогів $(BOOST_ROOT)
. Тоді, якщо / коли ви переходите на нову версію бібліотеки підвищення, ви можете оновити змінну середовища, щоб вказати на цю нову версію. Оскільки більшість ваших проектів використовуйте прискорення, вам не доведеться оновлювати "Додаткові включення каталогів" для всіх.
Ви також можете створити змінну BOOST_LIB і вказати її там, де розміщені лібри. Так само, як і для Linker-> Additional Directory Directories, вам не доведеться оновлювати проекти. У мене є старі речі, створені з версією vs10, і нові речі з vs14, тому вбудовані обидва аромати boost lib в одну папку. Отже, якщо я переміщу проект з vs10 на vs14, мені не доведеться змінювати шляхи підвищення.
ПРИМІТКА. Якщо ви зміните змінну середовища, вона не буде раптово працювати у відкритому проекті VS. VS завантажує змінні при запуску. Тож вам доведеться закрити VS і знову відкрити його.