คำอธิบายทีละขั้นตอนที่ดีเกี่ยวกับวิธีใช้ไลบรารี Boost ในโครงการเปล่าใน Visual Studio คืออะไร
คำอธิบายทีละขั้นตอนที่ดีเกี่ยวกับวิธีใช้ไลบรารี Boost ในโครงการเปล่าใน Visual Studio คืออะไร
คำตอบ:
ในขณะที่คำตอบของ Nateนั้นค่อนข้างดีอยู่แล้ว แต่ฉันจะขยายให้มากขึ้นโดยเฉพาะสำหรับ 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 ในขั้นตอนที่ 5Boost.IOStreams Zlib ฟิลเตอร์
C:\zlib-1.2.5
)-sZLIB_SOURCE="C:\zlib-1.2.5"
เมื่อรัน b2 ในขั้นตอนที่ 5Boost.MPI
project-config.jam
ในไดเรกทอรี<BOOST_PATH>
ที่เกิดจากการรัน bootstrap เพิ่มในบรรทัดที่อ่านusing mpi ;
(หมายเหตุช่องว่างก่อน ';')Boost.Python
ในการสร้างไลบรารี่รุ่น 32- บิตทั้งหมดต้องใช้ Python 32- บิตและในทำนองเดียวกันสำหรับเวอร์ชัน 64- บิต หากคุณติดตั้งหลายรุ่นด้วยเหตุผลดังกล่าวคุณจะต้องบอก b2 ว่าจะค้นหารุ่นใดและเมื่อใดควรใช้อันไหน วิธีหนึ่งในการทำเช่นนั้นก็คือการแก้ไขไฟล์project-config.jam
ในไดเรกทอรี<BOOST_PATH>
ที่เกิดจากการรัน bootstrap เพิ่มสองบรรทัดต่อไปนี้ในการปรับตามความเหมาะสมสำหรับพา ธ การติดตั้ง Python & รุ่นของคุณ (สังเกตช่องว่างก่อนหน้า ';')
using python : 2.6 : C:\\Python\\Python26\\python ;
using python : 2.6 : C:\\Python\\Python26-x64\\python : : : <address-model>64 ;
โปรดทราบว่าข้อกำหนด Python ที่ชัดเจนดังกล่าวทำให้ MPI build ล้มเหลว ดังนั้นคุณจะต้องทำอาคารแยกต่างหากที่มีและไม่มีข้อกำหนดเพื่อสร้างทุกอย่างถ้าคุณกำลังสร้าง 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)
และC:\Boost\lib\i386
ไลบรารี่แบบ 32 บิต โปรดทราบว่าตำแหน่งเริ่มต้นสำหรับไลบรารีคือ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
ไปยังเส้นทาง libs ของคุณสิ่งนี้จะติดตั้งไฟล์ส่วนหัวของ Boost ใต้C:\Boost\include\boost-(version)
และC:\Boost\lib\x64
ไลบรารี่ 64- บิตใต้ โปรดทราบว่าตำแหน่งเริ่มต้นสำหรับไลบรารีคือ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
ไปยังเส้นทาง libs ของคุณคุณสามารถลอง -j% NUMBER_OF_PROCESSORS% เป็นอาร์กิวเมนต์ได้ซึ่งจะใช้คอร์ทั้งหมดของคุณ ทำให้สิ่งต่าง ๆ เร็วเป็นพิเศษบน quad core ของฉัน
ฉันสามารถแนะนำเคล็ดลับต่อไปนี้: สร้างboost.props
ไฟล์พิเศษ
ขั้นตอนนี้มีค่าที่เพิ่มรวมอยู่ในโครงการที่คุณต้องการรวมไว้อย่างชัดเจนเท่านั้น เมื่อคุณมีโครงการใหม่ที่ใช้การเพิ่มให้ทำ:
แก้ไข (แก้ไขดังต่อไปนี้จาก @ 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;
ตามเจมส์สิ่งนี้ควรใช้งานได้ (ใน C ++ 0x):
#include <memory>
using std::shared_ptr;
std
เนมสเปซทั้งหมดเนื่องจากอยู่ในมาตรฐาน C ++ 0x (ฉันคิดว่าพวกเขาอาจอยู่ในstd::tr1
เนมสเปซเช่นกันเพื่อความเข้ากันได้ย้อนหลัง)
เธรดนี้ใช้เวลาพักหนึ่งแล้วและฉันคิดว่าฉันจะเพิ่มบางอย่างเกี่ยวกับวิธีสร้าง Boost ให้เร็วที่สุดเท่าที่จะทำได้บนฮาร์ดแวร์เฉพาะของคุณ
หากคุณมี 4 หรือ 6-core ให้ใช้ -j5 หรือ -j7 ตามลำดับ ไม่แน่นอนไม่สร้างมาตรฐานหรือ -j2 เว้นแต่คุณจะมีดูอัลคอร์แน่นอน
ฉันใช้ Sandy Bridge Extreme พร้อมสต็อกโอเวอร์คล็อก 3930K (6 คอร์) บนสถานีหลักของฉัน แต่มี 2600k (4 คอร์) บนกล่องสำรองข้อมูลเก่าและแนวโน้มคือฉันได้รับเวลาคอมไพล์ Boost ที่ดีที่สุดด้วย N + 1 บิลด์โปรเซสที่ N คือจำนวนของฟิสิคัลคอร์ N + 2 มาถึงจุดที่ผลตอบแทนลดลงและเวลาเพิ่มขึ้น
หมายเหตุ: เปิดใช้งาน Hyperthreading, 32GB RAM DDR3, Samsung 840 EVO SSD
-j7 บน 6-core (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-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-core (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/ เช่นโดย svn
หลังจากนั้น: cmd -> ไปที่ไดเรกทอรีเพิ่ม ("D: \ boostTrunk" - ที่คุณชำระเงินหรือดาวน์โหลดและแยกแพคเกจ): คำสั่ง: bootstrap
เราสร้าง bjam.exe ใน ("D: \ boostTrunk") หลังจากนั้น: คำสั่ง: bjam toolset = msvc-10.0 variant = debug, ปล่อยเธรด = 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;
}
แหล่งข้อมูล: https://www.youtube.com/watch?v=5AmwIwedTCM
นี่คือวิธีที่ฉันสามารถใช้ Boost:
คุณจะสามารถสร้างโครงการของคุณได้โดยไม่มีข้อผิดพลาด!
โปรแกรมติดตั้ง Windows ที่อยู่ที่นี่ทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน ฉันทำตามขั้นตอนต่อไปนี้:
โชคดี!
KTC เป็นคำตอบหลักที่ให้ข้อมูลเพิ่มเติมเล็กน้อย:
หากคุณกำลังใช้ Visual Studio c ++ 2010 Express ฟรีและจัดการเพื่อให้มันรวบรวมไบนารี 64- บิตและตอนนี้ต้องการใช้เพื่อใช้ Boost libaries รุ่น 64 บิตคุณอาจจบด้วย 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 ของคุณตั้งค่าไดเรกทอรีรวมเพิ่มเติม:
สำหรับตัวอย่างง่ายๆ:
วิธีการติดตั้ง Boost Libraries ใน Visual Studio
หากคุณไม่ต้องการใช้ห้องสมุดเพิ่มทั้งหมดเพียงแค่ส่วนย่อย:
การใช้ส่วนย่อยของไลบรารีเพิ่มใน Windows
หากคุณต้องการเฉพาะตอนนี้เกี่ยวกับไลบรารีที่ต้องรวบรวม:
นอกจากนี้ยังมีบางสิ่งที่ฉันพบว่ามีประโยชน์มาก ใช้ตัวแปรสภาพแวดล้อมสำหรับเส้นทางเพิ่มของคุณ (วิธีการตั้งค่าตัวแปรสภาพแวดล้อมใน windows ลิงก์ที่ด้านล่างสำหรับ 7,8,10)ตัวแปร BOOST_ROOT ดูเหมือนจะเป็นสถานที่ทั่วไปอีกต่อไปและถูกตั้งค่าเป็นเส้นทางรากที่คุณเปิดเครื่องรูดเพิ่ม
จากนั้นในอสังหาริมทรัพย์, C ++ $(BOOST_ROOT)
ทั่วไปเพิ่มเติมรวมถึงการใช้ไดเรกทอรี จากนั้นหาก / เมื่อคุณย้ายไปยังไลบรารีบูสต์รุ่นใหม่กว่าคุณสามารถอัปเดตตัวแปรสภาพแวดล้อมของคุณเพื่อให้ชี้ไปที่เวอร์ชันใหม่กว่านี้ ในฐานะที่เป็นโครงการของคุณให้ใช้การเพิ่มคุณจะไม่ต้องอัปเดต 'ไดเรกทอรีรวมเพิ่มเติม' สำหรับพวกเขาทั้งหมด
คุณสามารถสร้างตัวแปร BOOST_LIB และชี้ไปที่ตำแหน่งที่ libs ดังนั้นเช่นเดียวกันกับ Linker-> ไดเรกทอรีไลบรารีเพิ่มเติมคุณไม่จำเป็นต้องอัพเดตโครงการ ฉันมีของเก่าที่สร้างขึ้นด้วย vs10 และของใหม่ที่มี vs14 ดังนั้นฉันจึงสร้างทั้งสองรสชาติของ lib เพิ่มในโฟลเดอร์เดียวกัน ดังนั้นถ้าฉันย้ายโครงการจาก vs10 เป็น vs14 ฉันไม่จำเป็นต้องเปลี่ยนเส้นทางการเพิ่ม
หมายเหตุ: หากคุณเปลี่ยนตัวแปรสภาพแวดล้อมมันจะไม่สามารถทำงานในโครงการ VS แบบเปิดได้ทันใด VS โหลดตัวแปรเมื่อเริ่มต้น ดังนั้นคุณจะต้องปิด VS และเปิดใหม่อีกครั้ง